[lustre-devel] [PATCH 2/5] lustre: socklnd: use ksocknal_enumerate_interfaces for individual interfaces.
NeilBrown
neilb at suse.com
Tue Jul 24 16:07:16 PDT 2018
When individual interfaces are listed, such a via a module parameter,
it is easy to use ksocknal_enumerate_interfaces() to find them, and
save duplicating code.
Signed-off-by: NeilBrown <neilb at suse.com>
---
.../staging/lustre/lnet/klnds/socklnd/socklnd.c | 37 ++++++--------------
1 file changed, 12 insertions(+), 25 deletions(-)
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
index 895f744bb959..d37f7134b31d 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
@@ -2613,7 +2613,7 @@ ksocknal_shutdown(struct lnet_ni *ni)
}
static int
-ksocknal_enumerate_interfaces(struct ksock_net *net)
+ksocknal_enumerate_interfaces(struct ksock_net *net, char *iname)
{
int j = 0;
struct net_device *dev;
@@ -2622,10 +2622,13 @@ ksocknal_enumerate_interfaces(struct ksock_net *net)
for_each_netdev(&init_net, dev) {
const char *name = dev->name;
struct in_device *in_dev;
- struct ksock_interface *ksi = &net->ksnn_interfaces[j];
+ struct ksock_interface *ksi =
+ &net->ksnn_interfaces[net->ksnn_ninterfaces + j];
if (strcmp(name, "lo") == 0) /* skip the loopback IF */
continue;
+ if (iname && strcmp(name, iname) != 0)
+ continue;
if (!(dev_get_flags(dev) & IFF_UP)) {
CWARN("Ignoring interface %s (down)\n", name);
@@ -2655,7 +2658,7 @@ ksocknal_enumerate_interfaces(struct ksock_net *net)
}
rtnl_unlock();
- if (!j)
+ if (!iname && !j)
CERROR("Can't find any usable interfaces\n");
return j;
@@ -2802,40 +2805,24 @@ ksocknal_startup(struct lnet_ni *ni)
ni->ni_peertxcredits = *ksocknal_tunables.ksnd_peertxcredits;
ni->ni_peerrtrcredits = *ksocknal_tunables.ksnd_peerrtrcredits;
+ net->ksnn_ninterfaces = 0;
if (!ni->ni_interfaces[0]) {
- rc = ksocknal_enumerate_interfaces(net);
+ rc = ksocknal_enumerate_interfaces(net, NULL);
if (rc <= 0)
goto fail_1;
+ /* FIXME why is this 1, not rc ?? */
net->ksnn_ninterfaces = 1;
} else {
for (i = 0; i < LNET_MAX_INTERFACES; i++) {
- int up;
-
if (!ni->ni_interfaces[i])
break;
+ rc = ksocknal_enumerate_interfaces(net, ni->ni_interfaces[i]);
- rc = lnet_ipif_query(ni->ni_interfaces[i], &up,
- &net->ksnn_interfaces[i].ksni_ipaddr,
- &net->ksnn_interfaces[i].ksni_netmask);
-
- if (rc) {
- CERROR("Can't get interface %s info: %d\n",
- ni->ni_interfaces[i], rc);
- goto fail_1;
- }
-
- if (!up) {
- CERROR("Interface %s is down\n",
- ni->ni_interfaces[i]);
+ if (rc <= 0)
goto fail_1;
- }
-
- strlcpy(net->ksnn_interfaces[i].ksni_name,
- ni->ni_interfaces[i],
- sizeof(net->ksnn_interfaces[i].ksni_name));
+ net->ksnn_ninterfaces += rc;
}
- net->ksnn_ninterfaces = i;
}
/* call it before add it to ksocknal_data.ksnd_nets */
More information about the lustre-devel
mailing list