From 7fa0fd41577001629f7ecc418cfe814a46207148 Mon Sep 17 00:00:00 2001 From: Vladimir Saveliev Date: Thu, 4 Oct 2018 14:50:56 +0300 Subject: [PATCH] LU-11441 obdclass: make mod rpc slot wait queue FIFO Relatively big load may cause a process to spin for a long time without successful grabbing a free mod rpc slot. It has been observed a process spinning more than 100 seconds when there were 72 mdtest-s and 8 IOR-s. Make mod rpc slot wait queue to run FIFO so that waiting thread got free mod rpc slot in order they entered the queue. Cray-bug-id: LUS-6380 Change-Id: I4ef2cf529cf1bb4c8500d7a2b181a05ca080223e Signed-off-by: Alexander Zarochentsev Signed-off-by: Vladimir Saveliev Reviewed-on: https://review.whamcloud.com/33282 Tested-by: Jenkins Reviewed-by: Alex Zhuravlev Reviewed-by: Alexandr Boyko Reviewed-by: Mike Pershin Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/obdclass/genops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c index a7d816e..1325398 100644 --- a/lustre/obdclass/genops.c +++ b/lustre/obdclass/genops.c @@ -2395,8 +2395,9 @@ __u16 obd_get_mod_rpc_slot(struct client_obd *cli, __u32 opc, "opc %u, max %hu\n", cli->cl_import->imp_obd->obd_name, opc, max); - l_wait_event(cli->cl_mod_rpcs_waitq, - obd_mod_rpc_slot_avail(cli, close_req), &lwi); + l_wait_event_exclusive(cli->cl_mod_rpcs_waitq, + obd_mod_rpc_slot_avail(cli, close_req), + &lwi); } while (true); } EXPORT_SYMBOL(obd_get_mod_rpc_slot); -- 1.8.3.1