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)
committerOleg Drokin <green@whamcloud.com>
Wed, 21 Nov 2012 20:07:51 +0000 (15:07 -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/4299
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
Reviewed-by: Cory Spitz <spitzcor@cray.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ptlrpc/events.c

index c85ee23..55cc32e 100644 (file)
@@ -178,6 +178,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;
 
         LASSERT ((desc->bd_type == BULK_PUT_SINK &&
@@ -198,7 +199,7 @@ void client_bulk_callback (lnet_event_t *ev)
                ev->type, ev->status, desc);
 
         cfs_spin_lock(&desc->bd_lock);
-
+        req = desc->bd_req;
         LASSERT(desc->bd_network_rw);
         desc->bd_network_rw = 0;
 
@@ -206,6 +207,11 @@ 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 */
+                cfs_spin_lock(&req->rq_lock);
+                req->rq_net_err = 1;
+                cfs_spin_unlock(&req->rq_lock);
         }
 
         /* release the encrypted pages for write */
@@ -214,7 +220,7 @@ void client_bulk_callback (lnet_event_t *ev)
 
         /* 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);
 
         cfs_spin_unlock(&desc->bd_lock);
         EXIT;