diff --git a/lustre/ptlrpc/client.c b/lustre/ptlrpc/client.c
index 12cf867dea243c625478a8cfd01369c567eefd21..fdc1b37a87d1b4649bd3a014d69e6c1fdd0d614e 100644
--- a/lustre/ptlrpc/client.c
+++ b/lustre/ptlrpc/client.c
@@ -1489,6 +1489,11 @@ static int ptlrpc_replay_interpret(struct ptlrpc_request *req,
         unsigned long flags;
 
         atomic_dec(&imp->imp_replay_inflight);
+        
+        if (!req->rq_replied) {
+                CERROR("request replay timed out, restarting recovery\n");
+                GOTO(out, rc = -ETIMEDOUT);
+        }
 
 #if SWAB_PARANOIA
         /* Clear reply swab mask; this is a new reply in sender's byte order */