From a4e1567d67559b797a5c24ee0bfbca4a52649c47 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Mon, 7 Jun 2021 15:17:27 -0400 Subject: [PATCH] LU-14741 obdclass: Wake up entire queue of requests on close completion Since close requests could be stuck behind normal requests and get more slots we need to wake up entire accumulated queue waiting for the next modrpc slot or have additional waitqueue just for close requests. This patch goes with the former approach. Fixes: 1fc013f901 ("LU-5319 mdc: manage number of modify RPCs in flight") Change-Id: Ib4333c7f6731dd435364d5e5f529577a1600a235 Signed-off-by: Oleg Drokin Reviewed-on: https://review.whamcloud.com/43941 Reviewed-by: Andreas Dilger Tested-by: jenkins Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Neil Brown --- lustre/obdclass/genops.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c index 0bec4b7..01c575b 100644 --- a/lustre/obdclass/genops.c +++ b/lustre/obdclass/genops.c @@ -2337,7 +2337,11 @@ void obd_put_mod_rpc_slot(struct client_obd *cli, __u32 opc, __u16 tag) LASSERT(tag - 1 < OBD_MAX_RIF_MAX); LASSERT(test_and_clear_bit(tag - 1, cli->cl_mod_tag_bitmap) != 0); spin_unlock(&cli->cl_mod_rpcs_lock); - wake_up(&cli->cl_mod_rpcs_waitq); + /* LU-14741 - to prevent close RPCs stuck behind normal ones */ + if (close_req) + wake_up_all(&cli->cl_mod_rpcs_waitq); + else + wake_up(&cli->cl_mod_rpcs_waitq); } EXPORT_SYMBOL(obd_put_mod_rpc_slot); -- 1.8.3.1