diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index f585e055e496c96c456f9113946d7b79956ce6a9..7867120973a2c4f59d71eaa705e061bec8f1f8c7 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 932564d62bcec5f7b1c8a4af35bc7167a7d807f8..b18f6421a2d766b698995001029cacac9582b7bc 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 0d1680901205599d4588828159dce151bb335a9c..ed931328ad4d8d90c846f27b69ee0cceeab3ee0b 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;