diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 5430860c5fa07201e67025634c629bb767cf17d0..4e392465d6f609776209f067dcdfbf3d2952c154 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 9c25c402508a7d606b4ea65c7c45790adce67355..bf1910f1be50a01f587f743e87ee108daf8e0b39 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;