From: Niu Yawei Date: Thu, 22 Jun 2017 07:03:38 +0000 (-0400) Subject: LU-9274 ptlrpc: add replay request into unreplied list X-Git-Tag: 2.10.0-RC3~1 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=ee33046d783937300b65d4e3766c3001d51012d1;p=fs%2Flustre-release.git LU-9274 ptlrpc: add replay request into unreplied list ptlrpc_prepare_replay() may fail to add replay request into unreplied list if the request hasn't been on replay list yet, so in ptlrpc_replay_next() before sending replay, we'd always make sure the replay request is on unreplied list. Signed-off-by: Niu Yawei Change-Id: I91757cd4fde1d85d146475e078db125acc2c821f Reviewed-on: https://review.whamcloud.com/27920 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Yang Sheng Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- diff --git a/lustre/ptlrpc/recover.c b/lustre/ptlrpc/recover.c index f510b74..c526e9e 100644 --- a/lustre/ptlrpc/recover.c +++ b/lustre/ptlrpc/recover.c @@ -140,10 +140,13 @@ int ptlrpc_replay_next(struct obd_import *imp, int *inflight) if (req != NULL && imp->imp_resend_replay) lustre_msg_add_flags(req->rq_reqmsg, MSG_RESENT); - /* The resend replay request may have been removed from the + /* ptlrpc_prepare_replay() may fail to add the reqeust into unreplied + * list if the request hasn't been added to replay list then. Another + * exception is that resend replay could have been removed from the * unreplied list. */ - if (req != NULL && imp->imp_resend_replay && - list_empty(&req->rq_unreplied_list)) { + if (req != NULL && list_empty(&req->rq_unreplied_list)) { + DEBUG_REQ(D_HA, req, "resend_replay: %d, last_transno: %llu\n", + imp->imp_resend_replay, last_transno); ptlrpc_add_unreplied(req); imp->imp_known_replied_xid = ptlrpc_known_replied_xid(imp); } @@ -152,8 +155,6 @@ int ptlrpc_replay_next(struct obd_import *imp, int *inflight) spin_unlock(&imp->imp_lock); if (req != NULL) { - /* The request should have been added back in unreplied list - * by ptlrpc_prepare_replay(). */ LASSERT(!list_empty(&req->rq_unreplied_list)); rc = ptlrpc_replay_req(req);