diff --git a/lustre/ptlrpc/events.c b/lustre/ptlrpc/events.c
index e765d5dd279ac17317698bbd29d3eef307694973..32b9cf5af517f6f089dba3ac8c20a24360e310b3 100644
--- a/lustre/ptlrpc/events.c
+++ b/lustre/ptlrpc/events.c
@@ -105,11 +105,13 @@ void reply_in_callback(lnet_event_t *ev)
 
         req->rq_receiving_reply = 0;
         req->rq_early = 0;
+        if (ev->unlinked)
+                req->rq_must_unlink = 0;
         
         if (ev->status)
                 goto out_wake;
         if (ev->type == LNET_EVENT_UNLINK) {
-                req->rq_must_unlink = 0;
+                LASSERT(ev->unlinked);
                 DEBUG_REQ(D_RPCTRACE, req, "unlink");
                 goto out_wake;
         }
@@ -127,18 +129,10 @@ void reply_in_callback(lnet_event_t *ev)
                                ev->mlength, lustre_msg_early_size());
 
                 req->rq_early_count++; /* number received, client side */
-                if (req->rq_replied) {
-                        /* If we already got the real reply, then we need to
-                         * check if lnet_finalize() unlinked the md.  In that
-                         * case, there will be no further callback of type
-                         * LNET_EVENT_UNLINK.
-                         */
-                        if (ev->unlinked)
-                                req->rq_must_unlink = 0;
-                        else
-                                DEBUG_REQ(D_RPCTRACE, req, "unlinked in reply");
+
+                if (req->rq_replied)   /* already got the real reply */
                         goto out_wake;
-                }
+
                 req->rq_early = 1;
                 req->rq_nob_received = ev->mlength;
                 /* repmsg points to early reply */