Whamcloud - gitweb
LU-11441 obdclass: make mod rpc slot wait queue FIFO 82/33282/3
authorVladimir Saveliev <c17830@cray.com>
Thu, 4 Oct 2018 11:50:56 +0000 (14:50 +0300)
committerOleg Drokin <green@whamcloud.com>
Wed, 10 Oct 2018 01:50:37 +0000 (01:50 +0000)
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 <c17826@cray.com>
Signed-off-by: Vladimir Saveliev <c17830@cray.com>
Reviewed-on: https://review.whamcloud.com/33282
Tested-by: Jenkins
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Alexandr Boyko <c17825@cray.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/genops.c

index a7d816e..1325398 100644 (file)
@@ -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);