Whamcloud - gitweb
b=6371
authorjacob <jacob>
Wed, 25 May 2005 15:57:45 +0000 (15:57 +0000)
committerjacob <jacob>
Wed, 25 May 2005 15:57:45 +0000 (15:57 +0000)
r=adilger, r=phil

Severity   : major
Frequency  : rare
Bugzilla   : 6371
Description: After recovery, certain operations trigger a failed
             assertion on a client.
Details    : Failing over an mds, using lconf -d --failover, while a
             client was doing a readdir() call would cause the client to
             LBUG after recovery completed and the readdir() was resent.

lustre/ChangeLog
lustre/ptlrpc/client.c

index 1ec8321..af7bb94 100644 (file)
@@ -60,6 +60,15 @@ Details    : This builds on the enhanced upcall-less recovery that was added
              now try each server in the failover group every 10 seconds.  By
              default, clients would previously try one server every 25 seconds.
 
+Severity   : major
+Frequency  : rare
+Bugzilla   : 6371
+Description: After recovery, certain operations trigger a failed
+             assertion on a client.
+Details    : Failing over an mds, using lconf -d --failover, while a
+             client was doing a readdir() call would cause the client to 
+             LBUG after recovery completed and the readdir() was resent.
+
 ------------------------------------------------------------------------------
 
 2005-05-05  Cluster File Systems, Inc. <info@clusterfs.com>
index a2deced..3e13378 100644 (file)
@@ -1396,9 +1396,19 @@ restart:
         if (req->rq_resend) {
                 lustre_msg_add_flags(req->rq_reqmsg, MSG_RESENT);
 
-                if (req->rq_bulk != NULL)
+                if (req->rq_bulk != NULL) {
                         ptlrpc_unregister_bulk (req);
 
+                        /* bulk requests are supposed to be
+                         * idempotent, so we are free to bump the xid
+                         * here, which we need to do before
+                         * registering the bulk again (bug 6371).
+                         * print the old xid first for sanity.
+                         */
+                        DEBUG_REQ(D_HA, req, "bumping xid for bulk: ");
+                        req->rq_xid = ptlrpc_next_xid();
+                }
+
                 DEBUG_REQ(D_HA, req, "resending: ");
         }