Whamcloud - gitweb
LU-12678 lnet: prepare to make lnet_lnd const.
[fs/lustre-release.git] / lnet / lnet / api-ni.c
index d6e5e3d..a593597 100644 (file)
@@ -800,16 +800,14 @@ static void lnet_assert_wire_constants(void)
 static struct lnet_lnd *lnet_find_lnd_by_type(__u32 type)
 {
        struct lnet_lnd *lnd;
-       struct list_head *tmp;
 
        /* holding lnd mutex */
-       list_for_each(tmp, &the_lnet.ln_lnds) {
-               lnd = list_entry(tmp, struct lnet_lnd, lnd_list);
+       if (type >= NUM_LNDS)
+               return NULL;
+       lnd = the_lnet.ln_lnds[type];
+       LASSERT(!lnd || lnd->lnd_type == type);
 
-               if (lnd->lnd_type == type)
-                       return lnd;
-       }
-       return NULL;
+       return lnd;
 }
 
 unsigned int
@@ -827,7 +825,7 @@ lnet_register_lnd(struct lnet_lnd *lnd)
        LASSERT(libcfs_isknown_lnd(lnd->lnd_type));
        LASSERT(lnet_find_lnd_by_type(lnd->lnd_type) == NULL);
 
-       list_add_tail(&lnd->lnd_list, &the_lnet.ln_lnds);
+       the_lnet.ln_lnds[lnd->lnd_type] = lnd;
 
        CDEBUG(D_NET, "%s LND registered\n", libcfs_lnd2str(lnd->lnd_type));
 
@@ -842,7 +840,7 @@ lnet_unregister_lnd(struct lnet_lnd *lnd)
 
        LASSERT(lnet_find_lnd_by_type(lnd->lnd_type) == lnd);
 
-       list_del(&lnd->lnd_list);
+       the_lnet.ln_lnds[lnd->lnd_type] = NULL;
        CDEBUG(D_NET, "%s LND unregistered\n", libcfs_lnd2str(lnd->lnd_type));
 
        mutex_unlock(&the_lnet.ln_lnd_mutex);
@@ -2517,7 +2515,6 @@ int lnet_lib_init(void)
        }
 
        the_lnet.ln_refcount = 0;
-       INIT_LIST_HEAD(&the_lnet.ln_lnds);
        INIT_LIST_HEAD(&the_lnet.ln_net_zombie);
        INIT_LIST_HEAD(&the_lnet.ln_msg_resend);
 
@@ -2543,14 +2540,18 @@ int lnet_lib_init(void)
  *
  * \pre lnet_lib_init() called with success.
  * \pre All LNet users called LNetNIFini() for matching LNetNIInit() calls.
+ *
+ * As this happens at module-unload, all lnds must already be unloaded,
+ * so they must already be unregistered.
  */
 void lnet_lib_exit(void)
 {
-       LASSERT(the_lnet.ln_refcount == 0);
+       int i;
 
-       while (!list_empty(&the_lnet.ln_lnds))
-               lnet_unregister_lnd(list_entry(the_lnet.ln_lnds.next,
-                                              struct lnet_lnd, lnd_list));
+       LASSERT(the_lnet.ln_refcount == 0);
+       lnet_unregister_lnd(&the_lolnd);
+       for (i = 0; i < NUM_LNDS; i++)
+               LASSERT(!the_lnet.ln_lnds[i]);
        lnet_destroy_locks();
 }