From: Mr NeilBrown Date: Thu, 7 Nov 2019 06:00:07 +0000 (+1100) Subject: LU-13255 gnilnd: Use wait_var_event_warning() X-Git-Tag: 2.13.53~13 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=8f4d61088cbd0e5b7cfbaac3d6291902fa0ce8a8;ds=sidebyside LU-13255 gnilnd: Use wait_var_event_warning() LNet has a recurring pattern of waiting for some variable to reach a particular value, and generating a warning every second that it hasn't. In many cases the warning has a higher priority if the wait has been for a power-of-2 seconds. This pattern is now embodied in wait_var_event_warning() Use that macro in various places in gnilnd. Test-Parameters: trivial Signed-off-by: Mr NeilBrown Change-Id: I7be82a175c7b1b8da4df99199378e7af5328e0e7 Reviewed-on: https://review.whamcloud.com/37594 Tested-by: jenkins Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Chris Horn Reviewed-by: Oleg Drokin --- diff --git a/lnet/klnds/gnilnd/gnilnd.c b/lnet/klnds/gnilnd/gnilnd.c index 51f98e9..1a2867e 100644 --- a/lnet/klnds/gnilnd/gnilnd.c +++ b/lnet/klnds/gnilnd/gnilnd.c @@ -1593,19 +1593,14 @@ kgnilnd_del_conn_or_peer(kgn_net_t *net, lnet_nid_t nid, int command, return rc; } - i = 4; - while (atomic_read(&kgnilnd_data.kgn_npending_conns) || - atomic_read(&kgnilnd_data.kgn_npending_detach) || - atomic_read(&kgnilnd_data.kgn_npending_unlink)) { - - schedule_timeout_uninterruptible(cfs_time_seconds(1)); - i++; - - CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, "Waiting on %d peers %d closes %d detaches\n", + wait_var_event_warning(&kgnilnd_data, + !atomic_read(&kgnilnd_data.kgn_npending_conns) && + !atomic_read(&kgnilnd_data.kgn_npending_detach) && + !atomic_read(&kgnilnd_data.kgn_npending_unlink), + "Waiting on %d peers %d closes %d detaches\n", atomic_read(&kgnilnd_data.kgn_npending_unlink), atomic_read(&kgnilnd_data.kgn_npending_conns), atomic_read(&kgnilnd_data.kgn_npending_detach)); - } return rc; } diff --git a/lnet/klnds/gnilnd/gnilnd.h b/lnet/klnds/gnilnd/gnilnd.h index b9333de..ae0b72f 100644 --- a/lnet/klnds/gnilnd/gnilnd.h +++ b/lnet/klnds/gnilnd/gnilnd.h @@ -1159,18 +1159,20 @@ do { \ #error "this code uses actions inside LASSERT for ref counting" #endif -#define kgnilnd_admin_addref(atomic) \ -do { \ - int val = atomic_inc_return(&atomic); \ - LASSERTF(val > 0, #atomic " refcount %d\n", val); \ - CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val); \ +#define kgnilnd_admin_addref(atomic) \ +do { \ + int val = atomic_inc_return(&atomic); \ + LASSERTF(val > 0, #atomic " refcount %d\n", val); \ + CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val); \ } while (0) -#define kgnilnd_admin_decref(atomic) \ -do { \ - int val = atomic_dec_return(&atomic); \ - LASSERTF(val >=0, #atomic " refcount %d\n", val); \ - CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val); \ +#define kgnilnd_admin_decref(atomic) \ +do { \ + int val = atomic_dec_return(&atomic); \ + LASSERTF(val >= 0, #atomic " refcount %d\n", val); \ + CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val); \ + if (!val) \ + wake_up_var(&kgnilnd_data); \ }while (0) #define kgnilnd_net_addref(net) \