From 9182b9cdffda47496b834d107f97103dfe795c90 Mon Sep 17 00:00:00 2001
From: bobijam <bobijam>
Date: Wed, 12 Mar 2008 01:28:46 +0000
Subject: [PATCH] Branch b1_6 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_request.c | 10 ++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 5430860c5f..4e392465d6 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -17,6 +17,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_request.c b/lustre/mdc/mdc_request.c
index 9c25c40250..bf1910f1be 100644
--- a/lustre/mdc/mdc_request.c
+++ b/lustre/mdc/mdc_request.c
@@ -573,6 +573,10 @@ void mdc_set_open_replay_data(struct obd_client_handle *och,
                                                DLM_REPLY_REC_OFF,
                                                sizeof(*body));
 
+        /* If request is not eligible for replay, just bail out */
+        if (!open_req->rq_replay)
+                return;
+
         /* incoming message in my byte order (it's been swabbed) */
         LASSERT(rec != NULL);
         LASSERT(lustre_rep_swabbed(open_req, DLM_REPLY_REC_OFF));
@@ -587,12 +591,6 @@ void mdc_set_open_replay_data(struct obd_client_handle *och,
                 }
 
                 spin_lock(&open_req->rq_lock);
-                if (!open_req->rq_replay) {
-                        OBD_FREE(mod, sizeof(*mod));
-                        spin_unlock(&open_req->rq_lock);
-                        return;
-                }
-
                 och->och_mod = mod;
                 mod->mod_och = och;
                 mod->mod_open_req = open_req;
-- 
GitLab