From 7d29d3167684b13a612c8c1bff860019a218115c Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Thu, 22 Jun 2017 03:03:38 -0400 Subject: [PATCH 1/1] 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 --- lustre/ptlrpc/recover.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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); -- 1.8.3.1