Whamcloud - gitweb
LU-14741 obdclass: Wake up entire queue of requests on close completion 41/43941/3
authorOleg Drokin <green@whamcloud.com>
Mon, 7 Jun 2021 19:17:27 +0000 (15:17 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 30 Jun 2021 03:16:16 +0000 (03:16 +0000)
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 <green@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/43941
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
lustre/obdclass/genops.c

index 0bec4b7..01c575b 100644 (file)
@@ -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);