Whamcloud - gitweb
LU-14741 obdclass: Wake up queue of reqs on close completion
authorOleg Drokin <green@whamcloud.com>
Mon, 7 Jun 2021 19:17:27 +0000 (15:17 -0400)
committerAndreas Dilger <adilger@whamcloud.com>
Thu, 15 Jul 2021 09:18:11 +0000 (09:18 +0000)
Origin title:
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.

Lustre-change: https://review.whamcloud.com/43941
Lustre-commit: a4e1567d67559b797a5c24ee0bfbca4a52649c47

Fixes: 1fc013f901 ("LU-5319 mdc: manage number of modify RPCs in flight")
Change-Id: Ib4333c7f6731dd435364d5e5f529577a1600a235
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-on: https://review.whamcloud.com/44288
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/obdclass/genops.c

index f85dfd3..0f96861 100644 (file)
@@ -2339,7 +2339,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);