<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<span style="color: rgb(37, 36, 35); font-family: 'SF Regular', 'Segoe System UI Regular', 'Segoe UI Regular', sans-serif; font-size: 14px; font-variant-ligatures: normal; letter-spacing: -0.2px; orphans: 2; white-space: pre-wrap; widows: 2; background-color: rgb(242, 246, 249);" class="">Reviewed-by:
 Doug Oucharek <</span>
<div style="box-sizing: border-box; color: rgb(37, 36, 35); font-family: 'SF Regular', 'Segoe System UI Regular', 'Segoe UI Regular', sans-serif; font-size: 14px; font-variant-ligatures: normal; letter-spacing: -0.2px; orphans: 2; white-space: pre-wrap; widows: 2; background-color: rgb(242, 246, 249); position: relative; display: inline; flex-grow: 1; flex-shrink: 1; overflow: visible; overflow-wrap: break-word; cursor: inherit;" class="">
<a title="mailto:dougso@me.com" href="mailto:dougso@me.com" target="_blank" rel="noreferrer" tabindex="-1" style="box-sizing: border-box; background-color: transparent; outline-width: 0px; position: relative; display: inline; flex-grow: 0; flex-shrink: 0; overflow: visible; overflow-wrap: break-word; line-height: 22px; color: rgb(37, 36, 35); cursor: pointer;" class="">dougso@me.com</a></div>
<span style="color: rgb(37, 36, 35); font-family: 'SF Regular', 'Segoe System UI Regular', 'Segoe UI Regular', sans-serif; font-size: 14px; font-variant-ligatures: normal; letter-spacing: -0.2px; orphans: 2; white-space: pre-wrap; widows: 2; background-color: rgb(242, 246, 249);" class="">></span>
<div class="">
<div style="orphans: 2; widows: 2;" class=""><font color="#252423" face="SF Regular, Segoe System UI Regular, Segoe UI Regular, sans-serif" class=""><span style="font-size: 14px; letter-spacing: -0.20000000298023224px; white-space: pre-wrap; background-color: rgb(242, 246, 249);" class=""><br class="">
</span></font></div>
<div style="">
<blockquote type="cite" class="">
<div class="">On Jul 24, 2018, at 4:07 PM, NeilBrown <<a href="mailto:neilb@suse.com" class="">neilb@suse.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">for_each_netdev() is a more direct interface and doesn't require<br class="">
library support.<br class="">
<br class="">
Also get the ip address directly from the net_device, rather than<br class="">
using lnet_ipif_query().<br class="">
<br class="">
Signed-off-by: NeilBrown <<a href="mailto:neilb@suse.com" class="">neilb@suse.com</a>><br class="">
---<br class="">
.../staging/lustre/lnet/klnds/socklnd/socklnd.c    |   63 +++++++++-----------<br class="">
1 file changed, 28 insertions(+), 35 deletions(-)<br class="">
<br class="">
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c<br class="">
index c6e74ee01d27..895f744bb959 100644<br class="">
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c<br class="">
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c<br class="">
@@ -39,6 +39,7 @@<br class="">
 */<br class="">
<br class="">
#include "socklnd.h"<br class="">
+#include <linux/inetdevice.h><br class="">
<br class="">
static struct lnet_lnd the_ksocklnd;<br class="">
struct ksock_nal_data ksocknal_data;<br class="">
@@ -2614,53 +2615,45 @@ ksocknal_shutdown(struct lnet_ni *ni)<br class="">
static int<br class="">
ksocknal_enumerate_interfaces(struct ksock_net *net)<br class="">
{<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>char **names;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>int i;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>int j;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>int rc;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>int n;<br class="">
-<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>n = lnet_ipif_enumerate(&names);<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>if (n <= 0) {<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>CERROR("Can't enumerate interfaces: %d\n", n);<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>return n;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>}<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span>int j = 0;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span>struct net_device *dev;<br class="">
<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>for (i = j = 0; i < n; i++) {<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>int up;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>__u32 ip;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>__u32 mask;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span>rtnl_lock();<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span>for_each_netdev(&init_net, dev) {<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>const char *name = dev->name;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>struct in_device *in_dev;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>struct ksock_interface *ksi = &net->ksnn_interfaces[j];<br class="">
<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (!strcmp(names[i], "lo")) /* skip the loopback IF */<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (strcmp(name, "lo") == 0) /* skip the loopback IF */<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>continue;<br class="">
<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>rc = lnet_ipif_query(names[i], &up, &ip, &mask);<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (rc) {<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CWARN("Can't get interface %s info: %d\n",<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>     names[i], rc);<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>continue;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
-<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (!up) {<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CWARN("Ignoring interface %s (down)\n",<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>     names[i]);<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (!(dev_get_flags(dev) & IFF_UP)) {<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CWARN("Ignoring interface %s (down)\n", name);<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>continue;<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>if (j == LNET_MAX_INTERFACES) {<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CWARN("Ignoring interface %s (too many interfaces)\n",<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>     names[i]);<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>     name);<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>continue;<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
-<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>net->ksnn_interfaces[j].ksni_ipaddr = ip;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>net->ksnn_interfaces[j].ksni_netmask = mask;<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>strlcpy(net->ksnn_interfaces[j].ksni_name,<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>names[i], sizeof(net->ksnn_interfaces[j].ksni_name));<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>j++;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>in_dev = __in_dev_get_rtnl(dev);<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (!in_dev) {<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CWARN("Interface %s has no IPv4 status.\n", name);<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>continue;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>for_primary_ifa(in_dev)<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>if (strcmp(ifa->ifa_label, name) == 0) {<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>ksi->ksni_ipaddr
 = ifa->ifa_local;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>ksi->ksni_netmask
 = ifa->ifa_mask;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>strlcpy(ksi->ksni_name,<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>name,
 sizeof(ksi->ksni_name));<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>j++;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>break;<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>endfor_ifa(in_dev);<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>}<br class="">
-<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span>lnet_ipif_free_enumeration(names, n);<br class="">
+<span class="Apple-tab-span" style="white-space:pre"> </span>rtnl_unlock();<br class="">
<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>if (!j)<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CERROR("Can't find any usable interfaces\n");<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
lustre-devel mailing list<br class="">
<a href="mailto:lustre-devel@lists.lustre.org" class="">lustre-devel@lists.lustre.org</a><br class="">
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>