From: Liang Zhen Date: Wed, 27 Jul 2011 04:47:57 +0000 (+0800) Subject: LU-537 o2iblnd: support aliased interface X-Git-Tag: 2.1.53~10 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=8053e1507683f8731f97e6ae4a6fce90293fdbaf LU-537 o2iblnd: support aliased interface Current kiblnd_create_dev() doesn't allow to dev_get_by_name() to return NULL (we added this for supporting failover of ib-bonding), but this can happen for aliased interface, we can fix this by simply remove the limitation and set kib_dev_t::ibd_can_failover to 0 for aliased interface. Change-Id: Idc3e6e4fd2d5056594f38dd43a0a560c3455ea05 Signed-off-by: Liang Zhen Reviewed-on: http://review.whamcloud.com/1148 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Minh Diep Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin --- diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c index 190d90e..7324c94 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.c +++ b/lnet/klnds/o2iblnd/o2iblnd.c @@ -2588,18 +2588,17 @@ kiblnd_create_dev(char *ifname) memset(dev, 0, sizeof(*dev)); #ifdef HAVE_DEV_GET_BY_NAME_2ARG - if ((netdev = dev_get_by_name(&init_net, ifname)) == NULL) { + netdev = dev_get_by_name(&init_net, ifname); #else - if ((netdev = dev_get_by_name(ifname)) == NULL) { + netdev = dev_get_by_name(ifname); #endif - CERROR("Can't find netdev of IF: %s\n", ifname); - LIBCFS_FREE(dev, sizeof(*dev)); - return NULL; + if (netdev == NULL) { + dev->ibd_can_failover = 0; + } else { + dev->ibd_can_failover = !!(netdev->flags & IFF_MASTER); + dev_put(netdev); } - dev->ibd_can_failover = !!(netdev->flags & IFF_MASTER); - dev_put(netdev); - CFS_INIT_LIST_HEAD(&dev->ibd_nets); CFS_INIT_LIST_HEAD(&dev->ibd_list); /* not yet in kib_devs */ CFS_INIT_LIST_HEAD(&dev->ibd_fail_list); diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h index aa16854..332928a 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.h +++ b/lnet/klnds/o2iblnd/o2iblnd.h @@ -195,12 +195,20 @@ kiblnd_concurrent_sends_v1(void) struct kib_hca_dev; +/* o2iblnd can run over aliased interface */ +#ifdef IFALIASZ +#define KIB_IFNAME_SIZE IFALIASZ +#else +#define KIB_IFNAME_SIZE 256 +#endif + typedef struct { cfs_list_t ibd_list; /* chain on kib_devs */ cfs_list_t ibd_fail_list; /* chain on kib_failed_devs */ __u32 ibd_ifip; /* IPoIB interface IP */ - char ibd_ifname[32]; /* IPoIB interface name */ + /** IPoIB interface name */ + char ibd_ifname[KIB_IFNAME_SIZE]; int ibd_nnets; /* # nets extant */ cfs_time_t ibd_next_failover;