Whamcloud - gitweb
LU-13255 gnilnd: Use wait_var_event_warning() 94/37594/6
authorMr NeilBrown <neilb@suse.de>
Thu, 7 Nov 2019 06:00:07 +0000 (17:00 +1100)
committerOleg Drokin <green@whamcloud.com>
Tue, 31 Mar 2020 07:00:38 +0000 (07:00 +0000)
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 <neilb@suse.de>
Change-Id: I7be82a175c7b1b8da4df99199378e7af5328e0e7
Reviewed-on: https://review.whamcloud.com/37594
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/klnds/gnilnd/gnilnd.c
lnet/klnds/gnilnd/gnilnd.h

index 51f98e9..1a2867e 100644 (file)
@@ -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;
 }
index b9333de..ae0b72f 100644 (file)
@@ -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)                                                 \