[lustre-devel] [PATCH 01/30] lustre: lnd: resolve IP query code in LND drivers
NeilBrown
neilb at suse.com
Sun Sep 23 20:20:50 PDT 2018
On Mon, Sep 17 2018, James Simmons wrote:
> The recent IP querying code that landed to both ksocklnd and
> ko2iblnd have some bugs that prevent proper setup. The first
> bug in both drivers is that the IP address of ifa_local is in
> big endian format so on little endian systems the IP address
> is incorrect. Calling ntohl() on ifa_local gets the real IP
> address. The second bug located in ko2iblnd is that in_dev is
> always NULL. Add the call __in_dev_get_rtnl() to get in_dev
> and use that information to query the IP address.
Thanks!
I've added:
Fixes: 10e138e41a43 ("lustre: o2iblnd: get IP address more directly.")
Fixes: f703f71afd98 ("lustre: socklnd: use for_each_netdev() instead of lnet_ipif_enumerate()")
and applied this.
NeilBrown
>
> Signed-off-by: James Simmons <jsimmons at infradead.org>
> ---
> drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 12 +++++++++---
> drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c | 2 +-
> 2 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
> index 15953e4..6874e53 100644
> --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
> +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
> @@ -2468,8 +2468,7 @@ static struct kib_dev *kiblnd_create_dev(char *ifname)
> flags = dev_get_flags(netdev);
> if (!(flags & IFF_UP)) {
> CERROR("Can't query IPoIB interface %s: it's down\n", ifname);
> - rtnl_unlock();
> - return NULL;
> + goto unlock;
> }
>
> dev = kzalloc(sizeof(*dev), GFP_NOFS);
> @@ -2481,9 +2480,16 @@ static struct kib_dev *kiblnd_create_dev(char *ifname)
> INIT_LIST_HEAD(&dev->ibd_nets);
> INIT_LIST_HEAD(&dev->ibd_list); /* not yet in kib_devs */
> INIT_LIST_HEAD(&dev->ibd_fail_list);
> +
> + in_dev = __in_dev_get_rtnl(netdev);
> + if (!in_dev) {
> + kfree(dev);
> + goto unlock;
> + }
> +
> for_primary_ifa(in_dev)
> if (strcmp(ifa->ifa_label, ifname) == 0) {
> - dev->ibd_ifip = ifa->ifa_local;
> + dev->ibd_ifip = ntohl(ifa->ifa_local);
> break;
> }
> endfor_ifa(in_dev);
> diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> index 5b81040..750a7ce 100644
> --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> @@ -2589,7 +2589,7 @@ static int ksocknal_push(struct lnet_ni *ni, struct lnet_process_id id)
> }
> for_primary_ifa(in_dev)
> if (strcmp(ifa->ifa_label, name) == 0) {
> - ksi->ksni_ipaddr = ifa->ifa_local;
> + ksi->ksni_ipaddr = ntohl(ifa->ifa_local);
> ksi->ksni_netmask = ifa->ifa_mask;
> strlcpy(ksi->ksni_name,
> name, sizeof(ksi->ksni_name));
> --
> 1.8.3.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20180924/08db0d01/attachment.sig>
More information about the lustre-devel
mailing list