From e268b2e0d508809a1749dfe3160f124cccef40f7 Mon Sep 17 00:00:00 2001 From: bobijam Date: Tue, 23 Dec 2008 05:48:17 +0000 Subject: [PATCH] Branch b1_8 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 | 6 ++++++ lustre/osc/osc_request.c | 29 ++++++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index c01c358..5e8a05c 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -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 diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 0d2f3f4..2956fad 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -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); } -- 1.8.3.1