From 883d063770d396ba654753f9b6fb2d798c427380 Mon Sep 17 00:00:00 2001 From: Mikhail Pershin Date: Fri, 11 Jan 2013 11:21:10 +0400 Subject: [PATCH] LU-2397 recovery: check queue_len > 0 in check_for_next_transno The check_for_next_transno rely on obd_req_replay_clients is unable to change during that function call, it is not true. Patch makes sure that case with zero queue_len is excluded and check for obd_req_replay_clients is 0 after comparing with queue_len Signed-off-by: Mikhail Pershin Change-Id: I0b81e0f8e6a4f2cbfd51b6a049ee273cec4732a2 Reviewed-on: http://review.whamcloud.com/4998 Tested-by: Hudson Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/ldlm/ldlm_lib.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c index 59fb9f6..540c6bb 100644 --- a/lustre/ldlm/ldlm_lib.c +++ b/lustre/ldlm/ldlm_lib.c @@ -1735,13 +1735,11 @@ static int check_for_next_transno(struct obd_device *obd) } else if (obd->obd_recovery_expired) { CDEBUG(D_HA, "waking for expired recovery\n"); wake_up = 1; - } else if (cfs_atomic_read(&obd->obd_req_replay_clients) == 0) { - CDEBUG(D_HA, "waking for completed recovery\n"); - wake_up = 1; } else if (req_transno == next_transno) { CDEBUG(D_HA, "waking for next ("LPD64")\n", next_transno); wake_up = 1; - } else if (queue_len == cfs_atomic_read(&obd->obd_req_replay_clients)) { + } else if (queue_len > 0 && + queue_len == cfs_atomic_read(&obd->obd_req_replay_clients)) { int d_lvl = D_HA; /** handle gaps occured due to lost reply or VBR */ LASSERTF(req_transno >= next_transno, @@ -1759,6 +1757,9 @@ static int check_for_next_transno(struct obd_device *obd) req_transno, obd->obd_last_committed); obd->obd_next_recovery_transno = req_transno; wake_up = 1; + } else if (cfs_atomic_read(&obd->obd_req_replay_clients) == 0) { + CDEBUG(D_HA, "waking for completed recovery\n"); + wake_up = 1; } else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_RECOVERY_ACCEPTS_GAPS)) { CDEBUG(D_HA, "accepting transno gaps is explicitly allowed" " by fail_lock, waking up ("LPD64")\n", next_transno); -- 1.8.3.1