diff --git a/lustre/ptlrpc/recov_thread.c b/lustre/ptlrpc/recov_thread.c
index 60a4aaf1d320180ee477e153352f6d3375150425..60e8a130879d6694ab8c5c40aeda1001d6f1f082 100644
--- a/lustre/ptlrpc/recov_thread.c
+++ b/lustre/ptlrpc/recov_thread.c
@@ -234,9 +234,10 @@ static int llcd_send(struct llog_canceld_ctxt *llcd)
         req->rq_interpret_reply = llcd_interpret;
         req->rq_async_args.pointer_arg[0] = llcd;
         rc = ptlrpc_set_add_new_req(&lcm->lcm_pc, req);
-        if (rc)
+        if (rc) {
+                ptlrpc_request_free(req);
                 GOTO(exit, rc);
-
+        }
         RETURN(0);
 exit:
         CDEBUG(D_RPCTRACE, "Refused llcd %p\n", llcd);