Whamcloud - gitweb
LU-1517 ptlrpc: throw net error to ptlrpc for bulk
authorAlexander.Boyko <alexander_boyko@xyratex.com>
Mon, 17 Sep 2012 13:48:59 +0000 (17:48 +0400)
committerJohann Lombardi <johann.lombardi@intel.com>
Wed, 21 Nov 2012 20:26:59 +0000 (15:26 -0500)
Start reconnect and resend if network error occures
for the bulk transfer.

Signed-off-by: Alexander Boyko <alexander_boyko@xyratex.com>
Change-Id: I0cf2ee1230a039336f081fbb520c1ce768882088
Xyratex-bug-id: MRP-523
Reviewed-on: http://review.whamcloud.com/3102
Tested-by: Hudson
Reviewed-by: Liang Zhen <liang@whamcloud.com>
Reviewed-by: Keith Mannthey <keith.mannthey@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Cory Spitz <spitzcor@cray.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
lustre/ptlrpc/events.c

index d820570..0827ee5 100644 (file)
@@ -181,6 +181,7 @@ void client_bulk_callback (lnet_event_t *ev)
 {
         struct ptlrpc_cb_id     *cbid = ev->md.user_ptr;
         struct ptlrpc_bulk_desc *desc = cbid->cbid_arg;
+        struct ptlrpc_request   *req;
         ENTRY;
 
         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB))
@@ -198,7 +199,7 @@ void client_bulk_callback (lnet_event_t *ev)
                ev->type, ev->status, desc);
 
         spin_lock(&desc->bd_lock);
-
+        req = desc->bd_req;
         LASSERT(desc->bd_network_rw);
         desc->bd_network_rw = 0;
 
@@ -206,11 +207,16 @@ void client_bulk_callback (lnet_event_t *ev)
                 desc->bd_success = 1;
                 desc->bd_nob_transferred = ev->mlength;
                 desc->bd_sender = ev->sender;
+        } else {
+                /* start reconnect and resend if network error hit */
+                spin_lock(&req->rq_lock);
+                req->rq_net_err = 1;
+                spin_unlock(&req->rq_lock);
         }
 
         /* NB don't unlock till after wakeup; desc can disappear under us
          * otherwise */
-        ptlrpc_client_wake_req(desc->bd_req);
+        ptlrpc_client_wake_req(req);
 
         spin_unlock(&desc->bd_lock);
         EXIT;