<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="">
Reviewed-by: Doug Oucharek &lt;<a href="mailto:dougso@me.com" class="">dougso@me.com</a>&gt;
<div class=""><br class="">
</div>
<div class="">With regards to the FIXME comment:</div>
<div class="">That does seem to be a bug. &nbsp;There is an assumption that we will only get one address back from the enumerate call. &nbsp;That has probably been true in the field thus far. &nbsp;Should be safe to change it to rc as the comment indicates.</div>
<div class=""><br class="">
</div>
<div class="">Doug</div>
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Jul 24, 2018, at 4:07 PM, NeilBrown &lt;<a href="mailto:neilb@suse.com" class="">neilb@suse.com</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">When individual interfaces are listed, such a via a module parameter,<br class="">
it is easy to use ksocknal_enumerate_interfaces() to find them, and<br class="">
save duplicating code.<br class="">
<br class="">
Signed-off-by: NeilBrown &lt;<a href="mailto:neilb@suse.com" class="">neilb@suse.com</a>&gt;<br class="">
---<br class="">
.../staging/lustre/lnet/klnds/socklnd/socklnd.c &nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;37 &#43;&#43;&#43;&#43;&#43;&#43;--------------<br class="">
1 file changed, 12 insertions(&#43;), 25 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 895f744bb959..d37f7134b31d 100644<br class="">
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c<br class="">
&#43;&#43;&#43; b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c<br class="">
@@ -2613,7 &#43;2613,7 @@ ksocknal_shutdown(struct lnet_ni *ni)<br class="">
}<br class="">
<br class="">
static int<br class="">
-ksocknal_enumerate_interfaces(struct ksock_net *net)<br class="">
&#43;ksocknal_enumerate_interfaces(struct ksock_net *net, char *iname)<br class="">
{<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="">
@@ -2622,10 &#43;2622,13 @@ ksocknal_enumerate_interfaces(struct ksock_net *net)<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>for_each_netdev(&amp;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-&gt;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 = &amp;net-&gt;ksnn_interfaces[j];<br class="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>struct ksock_interface *ksi =<br class="">
&#43;<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>&amp;net-&gt;ksnn_interfaces[net-&gt;ksnn_ninterfaces &#43; 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(name, &quot;lo&quot;) == 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="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>if (iname &amp;&amp; strcmp(name, iname) != 0)<br class="">
&#43;<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>if (!(dev_get_flags(dev) &amp; 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(&quot;Ignoring interface %s (down)\n&quot;, name);<br class="">
@@ -2655,7 &#43;2658,7 @@ ksocknal_enumerate_interfaces(struct ksock_net *net)<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>}<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="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span>if (!iname &amp;&amp; !j)<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>CERROR(&quot;Can't find any usable interfaces\n&quot;);<br class="">
<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>return j;<br class="">
@@ -2802,40 &#43;2805,24 @@ ksocknal_startup(struct lnet_ni *ni)<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>ni-&gt;ni_peertxcredits &nbsp;= *ksocknal_tunables.ksnd_peertxcredits;<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>ni-&gt;ni_peerrtrcredits = *ksocknal_tunables.ksnd_peerrtrcredits;<br class="">
<br class="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span>net-&gt;ksnn_ninterfaces = 0;<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>if (!ni-&gt;ni_interfaces[0]) {<br class="">
-<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>rc = ksocknal_enumerate_interfaces(net);<br class="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>rc = ksocknal_enumerate_interfaces(net, NULL);<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>if (rc &lt;= 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>goto fail_1;<br class="">
<br class="">
&#43;<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre"></span>/* FIXME why is this 1, not rc ?? */<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>net-&gt;ksnn_ninterfaces = 1;<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span>} else {<br class="">
<span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>for (i = 0; i &lt; LNET_MAX_INTERFACES; i&#43;&#43;) {<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>int up;<br class="">
-<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 (!ni-&gt;ni_interfaces[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><span class="Apple-tab-span" style="white-space:pre"></span>break;<br class="">
&#43;<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>rc = ksocknal_enumerate_interfaces(net, ni-&gt;ni_interfaces[i]);<br class="">
<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>rc = lnet_ipif_query(ni-&gt;ni_interfaces[i], &amp;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><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&amp;net-&gt;ksnn_interfaces[i].ksni_ipaddr,<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>&nbsp;&nbsp;&nbsp;&nbsp;&amp;net-&gt;ksnn_interfaces[i].ksni_netmask);<br class="">
-<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 (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><span class="Apple-tab-span" style="white-space:pre"></span>CERROR(&quot;Can't get
 interface %s info: %d\n&quot;,<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ni-&gt;ni_interfaces[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><span class="Apple-tab-span" style="white-space:pre"></span>goto fail_1;<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="">
-<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 (!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><span class="Apple-tab-span" style="white-space:pre"></span>CERROR(&quot;Interface
 %s is down\n&quot;,<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ni-&gt;ni_interfaces[i]);<br class="">
&#43;<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 (rc &lt;= 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>goto fail_1;<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="">
-<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>strlcpy(net-&gt;ksnn_interfaces[i].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>ni-&gt;ni_interfaces[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><span class="Apple-tab-span" style="white-space:pre"></span>sizeof(net-&gt;ksnn_interfaces[i].ksni_name));<br class="">
&#43;<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>net-&gt;ksnn_ninterfaces &#43;= rc;<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>net-&gt;ksnn_ninterfaces = i;<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>/* call it before add it to ksocknal_data.ksnd_nets */<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>