Whamcloud - gitweb
LU-17230 socklnd: treat UNKNOWN netif operstate as UP
authorSerguei Smirnov <ssmirnov@whamcloud.com>
Thu, 26 Oct 2023 18:15:28 +0000 (11:15 -0700)
committerAndreas Dilger <adilger@whamcloud.com>
Thu, 30 Nov 2023 17:13:04 +0000 (17:13 +0000)
"UNKNOWN" (IF_OPER_UNKNOWN) operational state doesn't necessarily
mean that the interface can't be used and may be the result of
particular network driver not providing UP/DOWN states,
so it may be incorrect for socklnd to initiate
setting of a "fatal error" flag on a NI using an interface
in "UNKNOWN" operstate.

Lustre-change: https://review.whamcloud.com/52842
Lustre-commit: 6897dbe67c0d7d7554926128a17c65afa1ec0001

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I39dfa01f3758809440d50cf8b6b11555889ef366
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/53285
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
lnet/klnds/socklnd/socklnd.c

index 9001d05..d00731b 100644 (file)
@@ -83,7 +83,8 @@ static int ksocknal_ip2index(__u32 ipaddress, struct lnet_ni *ni,
 
        if ((ret == -1) ||
            ((dev->reg_state == NETREG_UNREGISTERING) ||
-            (dev->operstate != IF_OPER_UP)) ||
+            ((dev->operstate != IF_OPER_UP) &&
+             (dev->operstate != IF_OPER_UNKNOWN))) ||
            (lnet_get_link_status(dev) == 0))
                *dev_status = 0;
 
@@ -1821,7 +1822,7 @@ ksocknal_handle_link_state_change(struct net_device *dev,
        struct ksock_net *net;
        struct ksock_net *cnxt;
        int ifindex;
-       unsigned char link_down = !(operstate == IF_OPER_UP);
+       unsigned char link_down;
        struct in_device *in_dev;
        bool found_ip = false;
        struct ksock_interface *ksi = NULL;
@@ -1830,6 +1831,7 @@ ksocknal_handle_link_state_change(struct net_device *dev,
        int state;
        DECLARE_CONST_IN_IFADDR(ifa);
 
+       link_down = !((operstate == IF_OPER_UP) || (operstate == IF_OPER_UNKNOWN));
        ifindex = dev->ifindex;
 
        if (!ksocknal_data.ksnd_nnets)