[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lustre-cvs
Subject:    [lustre-cvs] b_devel: lustre/portals/knals/qswnal qswnal.c qswnal.h qswnal_cb.c
From:       Eric Barton <eeb () moraine ! clusterfs ! com>
Date:       2003-09-30 9:26:08
[Download RAW message or body]

Update of /cvsroot/lustre/lustre/portals/knals/qswnal
In directory moraine.clusterfs.com:/tmp/cvs-serv28387/portals/knals/qswnal

Modified Files:
      Tag: b_devel
	qswnal.c qswnal.h qswnal_cb.c 
Log Message:
*  Merged HEAD diffs


Index: qswnal.c
===================================================================
RCS file: /cvsroot/lustre/lustre/portals/knals/qswnal/qswnal.c,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -w -b -B -p -r1.1.2.6 -r1.1.2.7
--- qswnal.c	26 Sep 2003 03:59:02 -0000	1.1.2.6
+++ qswnal.c	30 Sep 2003 09:26:01 -0000	1.1.2.7
@@ -32,6 +32,7 @@ kpr_nal_interface_t kqswnal_router_inter
 	kprni_nalid:	QSWNAL,
 	kprni_arg:	NULL,
 	kprni_fwd:	kqswnal_fwd_packet,
+	kprni_notify:   NULL,			/* we're connectionless */
 };
 
 

Index: qswnal.h
===================================================================
RCS file: /cvsroot/lustre/lustre/portals/knals/qswnal/qswnal.h,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -w -b -B -p -r1.1.2.6 -r1.1.2.7
--- qswnal.h	5 Sep 2003 21:25:28 -0000	1.1.2.6
+++ qswnal.h	30 Sep 2003 09:26:01 -0000	1.1.2.7
@@ -169,6 +169,7 @@ typedef struct
         void             *ktx_args[2];          /* completion passthru */
         E3_Addr           ktx_ebuffer;          /* elan address of ktx_buffer */
         char             *ktx_buffer;           /* pre-allocated contiguous buffer \
for hdr + small payloads */ +        unsigned long     ktx_launchtime;       /* when \
(in jiffies) the transmit was launched */  
         /* debug/info fields */
         pid_t             ktx_launcher;         /* pid of launching process */

Index: qswnal_cb.c
===================================================================
RCS file: /cvsroot/lustre/lustre/portals/knals/qswnal/qswnal_cb.c,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -w -b -B -p -r1.1.2.9 -r1.1.2.10
--- qswnal_cb.c	7 Sep 2003 07:07:10 -0000	1.1.2.9
+++ qswnal_cb.c	30 Sep 2003 09:26:01 -0000	1.1.2.10
@@ -114,6 +114,18 @@ kqswnal_dist(nal_cb_t *nal, ptl_nid_t ni
 }
 
 void
+kqswnal_notify_peer_down(kqswnal_tx_t *ktx)
+{
+        struct timeval     now;
+        time_t             then;
+
+        do_gettimeofday (&now);
+        then = now.tv_sec - (jiffies - ktx->ktx_launchtime)/HZ;
+
+        kpr_notify(&kqswnal_data.kqn_router, ktx->ktx_nid, 0, then);
+}
+
+void
 kqswnal_unmap_tx (kqswnal_tx_t *ktx)
 {
         if (ktx->ktx_nmappedpages == 0)
@@ -451,7 +463,10 @@ kqswnal_txhandler(EP_TXD *txd, void *arg
 
         if (status != EP_SUCCESS)
         {
-                CERROR ("kqswnal: Transmit failed with %d\n", status);
+                CERROR ("Tx completion to "LPX64" failed: %d\n", 
+                        ktx->ktx_nid, status);
+
+                kqswnal_notify_peer_down(ktx);
                 status = -EIO;
 
         } else if (ktx->ktx_state == KTX_GETTING) {
@@ -475,6 +490,8 @@ kqswnal_launch (kqswnal_tx_t *ktx)
         long  flags;
         int   rc;
         
+        ktx->ktx_launchtime = jiffies;
+
         LASSERT (dest >= 0);                    /* must be a peer */
         if (ktx->ktx_state == KTX_GETTING) {
                 LASSERT (KQSW_OPTIMIZE_GETS);
@@ -487,12 +504,12 @@ kqswnal_launch (kqswnal_tx_t *ktx)
                                        ktx, ktx->ktx_frags.iov, ktx->ktx_nfrag);
         }
 
-        if (rc != ENOMEM)
-                return (rc);
-
-        /* can't allocate ep txd => queue for later */
+        switch (rc) {
+        case ESUCCESS: /* success */
+                return (0);
 
-        LASSERT (in_interrupt());      /* not called by thread (not looping) */
+        case ENOMEM: /* can't allocate ep txd => queue for later */
+                LASSERT (in_interrupt());
 
         spin_lock_irqsave (&kqswnal_data.kqn_sched_lock, flags);
 
@@ -501,10 +518,14 @@ kqswnal_launch (kqswnal_tx_t *ktx)
                 wake_up (&kqswnal_data.kqn_sched_waitq);
 
         spin_unlock_irqrestore (&kqswnal_data.kqn_sched_lock, flags);
-
         return (0);
-}
 
+        default: /* fatal error */
+                CERROR ("Tx to "LPX64" failed: %d\n", ktx->ktx_nid, rc);
+                kqswnal_notify_peer_down(ktx);
+                return (rc);
+        }
+}
 
 static char *
 hdr_type_string (ptl_hdr_t *hdr)
@@ -748,7 +769,8 @@ kqswnal_sendmsg (nal_cb_t     *nal,
 
         targetnid = nid;
         if (kqswnal_nid2elanid (nid) < 0) {     /* Can't send direct: find gateway? \
                */
-                rc = kpr_lookup (&kqswnal_data.kqn_router, nid, &targetnid);
+                rc = kpr_lookup (&kqswnal_data.kqn_router, nid, 
+                                 sizeof (ptl_hdr_t) + payload_nob, &targetnid);
                 if (rc != 0) {
                         CERROR("Can't route to "LPX64": router error %d\n",
                                nid, rc);
@@ -777,6 +799,16 @@ kqswnal_sendmsg (nal_cb_t     *nal,
 #if KQSW_OPTIMIZE_GETS
         if (type == PTL_MSG_REPLY &&
             ep_rxd_isrpc(((kqswnal_rx_t *)private)->krx_rxd)) {
+                if (nid != targetnid ||
+                    kqswnal_nid2elanid(nid) != 
+                    ep_rxd_node(((kqswnal_rx_t *)private)->krx_rxd)) {
+                        CERROR("Optimized reply nid conflict: "
+                               "nid "LPX64" via "LPX64" elanID %d\n",
+                               nid, targetnid,
+                               ep_rxd_node(((kqswnal_rx_t *)private)->krx_rxd));
+                        return(PTL_FAIL);
+                }
+
                 /* peer expects RPC completion with GET data */
                 rc = kqswnal_dma_reply (ktx,
                                         payload_niov, payload_iov, 
@@ -901,7 +933,8 @@ kqswnal_sendmsg (nal_cb_t     *nal,
                 return (PTL_FAIL);
         }
 
-        CDEBUG(D_NET, "send to "LPSZ" bytes to "LPX64"\n", payload_nob, targetnid);
+        CDEBUG(D_NET, "sent "LPSZ" bytes to "LPX64" via "LPX64"\n", 
+               payload_nob, nid, targetnid);
         return (PTL_OK);
 }
 

_______________________________________________
Lustre-cvs mailing list
Lustre-cvs@lists.clusterfs.com
https://lists.clusterfs.com/mailman/listinfo/lustre-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic