Whamcloud - gitweb
LU-10391 lnet: support setting LND timeouts 13/53013/4
authorJames Simmons <jsimmons@infradead.org>
Thu, 9 Nov 2023 19:54:43 +0000 (14:54 -0500)
committerOleg Drokin <green@whamcloud.com>
Sat, 18 Nov 2023 21:42:04 +0000 (21:42 +0000)
The patch that added support for NI setup with Netlink was
developed before individual LND timeout settings support was
merged. Add this missing settings. For ksocklnd we already
supported conns_per_peer so rearrange the code into a switch
statement.

Test-Parameters: trivial testlist=sanity-lnet
Fixes: 8f8f6e2f36e ("LU-10003 lnet: use Netlink to support old and new NI APIs.")
Change-Id: Iba955da7f5fa78b8a624bab6af66b577c75917e0
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53013
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/klnds/gnilnd/gnilnd.c
lnet/klnds/o2iblnd/o2iblnd.c
lnet/klnds/socklnd/socklnd.c

index c320d7d..375b87d 100644 (file)
@@ -27,7 +27,6 @@
 static int
 kgnilnd_nl_get(int cmd, struct sk_buff *msg, int type, void *data)
 {
-       struct lnet_ioctl_config_gnilnd_tunables *tuns;
        struct lnet_ni *ni = data;
 
        if (!ni || !msg)
@@ -36,12 +35,31 @@ kgnilnd_nl_get(int cmd, struct sk_buff *msg, int type, void *data)
        if (cmd != LNET_CMD_NETS || type != LNET_NET_LOCAL_NI_ATTR_LND_TUNABLES)
                return -EOPNOTSUPP;
 
-       tuns = &ni->ni_lnd_tunables.lnd_tun_u.lnd_gni;
        nla_put_u32(msg, LNET_NET_GNILND_TUNABLES_ATTR_LND_TIMEOUT,
                    kgnilnd_timeout());
        return 0;
 }
 
+static int
+kgnilnd_nl_set(int cmd, struct nlattr *attr, int type, void *data)
+{
+       struct lnet_ni *ni = data;
+
+       if (cmd != LNET_CMD_NETS)
+               return -EOPNOTSUPP;
+
+       if (nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
+               return -EINVAL;
+
+       if (type == LNET_NET_GNILND_TUNABLES_ATTR_LND_TIMEOUT) {
+               s64 timeout = nla_get_s64(attr);
+
+               ni->ni_lnd_tunables.lnd_tun_u.lnd_gni.lnd_timeout = timeout;
+       }
+
+       return 0;
+}
+
 /* Primary entry points from LNET.  There are no guarantees against reentrance. */
 const struct lnet_lnd the_kgnilnd = {
        .lnd_type       = GNILND,
@@ -52,6 +70,7 @@ const struct lnet_lnd the_kgnilnd = {
        .lnd_recv       = kgnilnd_recv,
        .lnd_eager_recv = kgnilnd_eager_recv,
        .lnd_nl_get     = kgnilnd_nl_get,
+       .lnd_nl_set     = kgnilnd_nl_set,
 };
 
 kgn_data_t      kgnilnd_data;
index 4f321b6..5df62c8 100644 (file)
@@ -1328,6 +1328,9 @@ kiblnd_nl_set(int cmd, struct nlattr *attr, int type, void *data)
        case LNET_NET_O2IBLND_TUNABLES_ATTR_NTX:
                tunables->lnd_tun_u.lnd_o2ib.lnd_ntx = nla_get_s64(attr);
                break;
+       case LNET_NET_O2IBLND_TUNABLES_ATTR_LND_TIMEOUT:
+               tunables->lnd_tun_u.lnd_o2ib.lnd_timeout = nla_get_s64(attr);
+               break;
        case LNET_NET_O2IBLND_TUNABLES_ATTR_CONNS_PER_PEER:
                num = nla_get_s64(attr);
                clamp_t(s64, num, 1, 127);
index e48a1d7..53102e1 100644 (file)
@@ -845,13 +845,23 @@ ksocknal_nl_set(int cmd, struct nlattr *attr, int type, void *data)
        if (cmd != LNET_CMD_NETS)
                return -EOPNOTSUPP;
 
-       if (type != LNET_NET_SOCKLND_TUNABLES_ATTR_CONNS_PER_PEER ||
-           nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
+       if (nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
                return -EINVAL;
 
-       num = nla_get_s64(attr);
-       clamp_t(s64, num, 1, 127);
-       tunables->lnd_tun_u.lnd_sock.lnd_conns_per_peer = num;
+       switch (type) {
+       case LNET_NET_SOCKLND_TUNABLES_ATTR_CONNS_PER_PEER:
+               /* value values are 1 to 127. Zero mean calculate the value */
+               num = nla_get_s64(attr);
+               clamp_t(s64, num, 0, 127);
+               tunables->lnd_tun_u.lnd_sock.lnd_conns_per_peer = num;
+               break;
+       case LNET_NET_SOCKLND_TUNABLES_ATTR_LND_TIMEOUT:
+               num = nla_get_s64(attr);
+               tunables->lnd_tun_u.lnd_sock.lnd_timeout = num;
+               fallthrough;
+       default:
+               break;
+       }
 
        return 0;
 }