Whamcloud - gitweb
Branch b1_8
authorbobijam <bobijam>
Tue, 23 Dec 2008 05:48:17 +0000 (05:48 +0000)
committerbobijam <bobijam>
Tue, 23 Dec 2008 05:48:17 +0000 (05:48 +0000)
b=18049
o=johann
i=adilger
i=zhenyu.xu (bobijam)

Descriptoin: aborting recovery hang on MDS
Details    : don't throttle destroy RPCs for the MDT.

lustre/ChangeLog
lustre/osc/osc_request.c

index c01c358..5e8a05c 100644 (file)
@@ -32,6 +32,12 @@ tbd Sun Microsystems, Inc.
          more information, please refer to bugzilla 17630.
 
 Severity   : normal
+Frequency  : start MDS on uncleanly shutdowned MDS device
+Bugzilla   : 18049
+Descriptoin: aborting recovery hang on MDS
+Details    : don't throttle destroy RPCs for the MDT.
+
+Severity   : normal
 Frequency  : race on file read and write
 Bugzilla   : 16417
 Description: Lustre doesn't delete files
index 0d2f3f4..2956fad 100644 (file)
@@ -665,7 +665,6 @@ static int osc_destroy(struct obd_export *exp, struct obdo *oa,
                 RETURN(-ENOMEM);
 
         req->rq_request_portal = OST_IO_PORTAL;         /* bug 7198 */
-        req->rq_interpret_reply = osc_destroy_interpret;
         ptlrpc_at_set_req_timeout(req);
 
         body = lustre_msg_buf(req->rq_reqmsg, REQ_REC_OFF, sizeof(*body));
@@ -677,15 +676,19 @@ static int osc_destroy(struct obd_export *exp, struct obdo *oa,
         memcpy(&body->oa, oa, sizeof(*oa));
         ptlrpc_req_set_repsize(req, 2, size);
 
-        if (!osc_can_send_destroy(cli)) {
-                struct l_wait_info lwi = { 0 };
-
-                /*
-                 * Wait until the number of on-going destroy RPCs drops
-                 * under max_rpc_in_flight
-                 */
-                l_wait_event_exclusive(cli->cl_destroy_waitq,
-                                       osc_can_send_destroy(cli), &lwi);
+        /* don't throttle destroy RPCs for the MDT */
+        if (!(cli->cl_import->imp_connect_flags_orig & OBD_CONNECT_MDS)) {
+                req->rq_interpret_reply = osc_destroy_interpret;
+                if (!osc_can_send_destroy(cli)) {
+                        struct l_wait_info lwi = { 0 };
+
+                        /*
+                         * Wait until the number of on-going destroy RPCs drops
+                         * under max_rpc_in_flight
+                         */
+                        l_wait_event_exclusive(cli->cl_destroy_waitq,
+                                               osc_can_send_destroy(cli), &lwi);
+                }
         }
 
         /* Do not wait for response */
@@ -3803,7 +3806,7 @@ static int osc_llog_init(struct obd_device *obd, struct obd_device *tgt,
         rc = llog_setup(obd, LLOG_SIZE_REPL_CTXT, tgt, count, NULL,
                         &osc_size_repl_logops);
         if (rc) {
-                struct llog_ctxt *ctxt = 
+                struct llog_ctxt *ctxt =
                         llog_get_context(obd, LLOG_MDS_OST_ORIG_CTXT);
                 if (ctxt)
                         llog_cleanup(ctxt);
@@ -3875,13 +3878,13 @@ static int osc_disconnect(struct obd_export *exp)
         ctxt = llog_get_context(obd, LLOG_SIZE_REPL_CTXT);
         if (ctxt) {
                 if (obd->u.cli.cl_conn_count == 1) {
-                        /* Flush any remaining cancel messages out to the 
+                        /* Flush any remaining cancel messages out to the
                          * target */
                         llog_sync(ctxt, exp);
                 }
                 llog_ctxt_put(ctxt);
         } else {
-                CDEBUG(D_HA, "No LLOG_SIZE_REPL_CTXT found in obd %p\n", 
+                CDEBUG(D_HA, "No LLOG_SIZE_REPL_CTXT found in obd %p\n",
                        obd);
         }