Whamcloud - gitweb
LU-13642 lnet: modify lnet_inetdev to work with large NIDS
[fs/lustre-release.git] / lnet / klnds / o2iblnd / o2iblnd.c
index 3f03a51..e1c82e5 100644 (file)
@@ -3577,8 +3577,7 @@ kiblnd_startup(struct lnet_ni *ni)
 
        kiblnd_tunables_setup(ni);
 
-       /*
-        * Multi-Rail wants each secondary
+       /* Multi-Rail wants each secondary
         * IP to be treated as an unique 'struct ni' interface.
         */
        if (ni->ni_interface != NULL) {
@@ -3586,6 +3585,9 @@ kiblnd_startup(struct lnet_ni *ni)
                ifname = ni->ni_interface;
        } else {
                ifname = *kiblnd_tunables.kib_default_ipif;
+               rc = libcfs_strnid(&ni->ni_nid, ifname);
+               if (rc < 0 || ni->ni_nid.nid_type != O2IBLND)
+                       memset(&ni->ni_nid, 0, sizeof(ni->ni_nid));
        }
 
        if (strlen(ifname) >= sizeof(ibdev->ibd_ifname)) {
@@ -3598,12 +3600,13 @@ kiblnd_startup(struct lnet_ni *ni)
        if (rc < 0)
                goto failed;
 
-       for (i = 0; i < rc; i++) {
-               if (strcmp(ifname, ifaces[i].li_name) == 0)
-                       break;
-       }
+       i = lnet_inet_select(ni, ifaces, rc);
+       if (i < 0)
+               goto failed;
 
-       if (i == rc) {
+       if (nid_addr_is_set(&ni->ni_nid)) {
+               strscpy(ifname, ifaces[i].li_name, sizeof(ifname));
+       } else if (strcmp(ifname, ifaces[i].li_name) != 0) {
                CERROR("ko2iblnd: No matching interfaces\n");
                rc = -ENOENT;
                goto failed;
@@ -3619,7 +3622,7 @@ kiblnd_startup(struct lnet_ni *ni)
                        goto failed;
                }
 
-               ibdev->ibd_ifip = ifaces[i].li_ipaddr;
+               ibdev->ibd_ifip = ntohl(ifaces[i].li_ipaddr);
                strlcpy(ibdev->ibd_ifname, ifaces[i].li_name,
                        sizeof(ibdev->ibd_ifname));
                ibdev->ibd_can_failover = ifaces[i].li_iff_master;