From 9d6d94d919c3255ad17a4817be8bcea278cd5def Mon Sep 17 00:00:00 2001
From: bobijam <bobijam>
Date: Wed, 12 Mar 2008 01:30:48 +0000
Subject: [PATCH] Branch HEAD b=15010 o=green i=vitaly i=adilger

Description: mdc_set_open_replay_data LBUG
Details    : Set replay data for requests that are eligible for replay.
---
 lustre/ChangeLog         |  6 ++++++
 lustre/mdc/mdc_locks.c   |  2 +-
 lustre/mdc/mdc_request.c | 11 ++++-------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index f585e055e4..7867120973 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -12,6 +12,12 @@ tbd  Sun Microsystems, Inc.
        * RHEL 4 and RHEL 5/SLES 10 clients behaves differently on 'cd' to a
         removed cwd "./" (refer to Bugzilla 14399).
 
+Severity   : major
+Frequency  : frequent on X2 node
+Bugzilla   : 15010
+Description: mdc_set_open_replay_data LBUG
+Details    : Set replay data for requests that are eligible for replay.
+
 Severity   : normal
 Bugzilla   : 14321
 Description: lustre_mgs: operation 101 on unconnected MGS
diff --git a/lustre/mdc/mdc_locks.c b/lustre/mdc/mdc_locks.c
index 932564d62b..b18f6421a2 100644
--- a/lustre/mdc/mdc_locks.c
+++ b/lustre/mdc/mdc_locks.c
@@ -573,7 +573,7 @@ int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
                         RETURN (-EPROTO);
                 }
 
-                if (req->rq_replay && it_disposition(it, DISP_OPEN_OPEN) &&
+                if (it_disposition(it, DISP_OPEN_OPEN) &&
                     !it_open_error(DISP_OPEN_OPEN, it)) {
                         /*
                          * If this is a successful OPEN request, we need to set
diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
index 0d16809012..ed931328ad 100644
--- a/lustre/mdc/mdc_request.c
+++ b/lustre/mdc/mdc_request.c
@@ -722,6 +722,9 @@ int mdc_set_open_replay_data(struct obd_export *exp,
         struct obd_import     *imp = open_req->rq_import;
         ENTRY;
 
+        if (!open_req->rq_replay)
+                RETURN(0);
+
         rec = req_capsule_client_get(&open_req->rq_pill, &RMF_REC_REINT);
         body = req_capsule_server_get(&open_req->rq_pill, &RMF_MDT_BODY);
         LASSERT(rec != NULL);
@@ -729,7 +732,7 @@ int mdc_set_open_replay_data(struct obd_export *exp,
         /* Outgoing messages always in my byte order. */
         LASSERT(body != NULL);
 
-        /*Only the import is replayable, we set replay_open data */
+        /* Only if the import is replayable, we set replay_open data */
         if (och && imp->imp_replayable) {
                 OBD_ALLOC_PTR(mod);
                 if (mod == NULL) {
@@ -740,12 +743,6 @@ int mdc_set_open_replay_data(struct obd_export *exp,
                 CFS_INIT_LIST_HEAD(&mod->mod_replay_list);
 
                 spin_lock(&open_req->rq_lock);
-                if (!open_req->rq_replay) {
-                        OBD_FREE(mod, sizeof(*mod));
-                        spin_unlock(&open_req->rq_lock);
-                        RETURN(0);
-                }
-
                 och->och_mod = mod;
                 mod->mod_och = och;
                 open_req->rq_cb_data = mod;
-- 
GitLab