[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