From a0f628bf5503ac444ef763f4f72cc86884cb9261 Mon Sep 17 00:00:00 2001
From: shadow <shadow>
Date: Wed, 27 Aug 2008 05:18:48 +0000
Subject: [PATCH] if ost is restarted before set_info(KEY_MDS_CONN) finished,
 this request will resend before finished ost llog init and this produce
 access to non init llog context.

Branch b1_6
b=16839
i=adilger
i=rread
---
 lustre/ChangeLog         | 8 ++++++++
 lustre/osc/osc_request.c | 5 ++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 6f37274505..bf7ad76e94 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -38,6 +38,14 @@ tbd Sun Microsystems, Inc.
 	* Output of lfs quota has been made less detailed by default,
 	  old (verbose) output can be obtained by using -v option.
 
+Severity   : normal
+Bugzilla   : 16839
+Frequency  : rare, on restart ost
+Description: llog_receptor_accept() ASSERTION(ctxt)
+Details    : if ost is restarted before set_info(KEY_MDS_CONN) finished, this
+             request will resend before finished ost llog init and this produce
+             access to non init llog context.
+
 Severity   : normal
 Bugzilla   : 15927
 Frequency  : rare
diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c
index 1555d61f04..a439d01fd4 100644
--- a/lustre/osc/osc_request.c
+++ b/lustre/osc/osc_request.c
@@ -3477,6 +3477,7 @@ static int osc_get_info(struct obd_export *exp, obd_count keylen,
                         RETURN(-ENOMEM);
 
                 size[REPLY_REC_OFF] = *vallen;
+                req->rq_no_delay = req->rq_no_resend = 1;
                 ptlrpc_req_set_repsize(req, 2, size);
                 rc = ptlrpc_queue_wait(req);
                 if (rc)
@@ -3623,8 +3624,10 @@ static int osc_set_info_async(struct obd_export *exp, obd_count keylen,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        if (KEY_IS(KEY_MDS_CONN))
+        if (KEY_IS(KEY_MDS_CONN)) {
                 req->rq_interpret_reply = osc_setinfo_mds_conn_interpret;
+                req->rq_no_delay = req->rq_no_resend = 1;
+        }
 
         ptlrpc_req_set_repsize(req, 1, NULL);
         ptlrpc_set_add_req(set, req);
-- 
GitLab