From aa2fa25325edfb6ee03ee343a46cfc2acfd68b42 Mon Sep 17 00:00:00 2001 From: James Simmons Date: Thu, 9 Nov 2023 14:54:43 -0500 Subject: [PATCH] LU-10391 lnet: support setting LND timeouts 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 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53013 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Chris Horn Reviewed-by: Serguei Smirnov Reviewed-by: Oleg Drokin --- lnet/klnds/gnilnd/gnilnd.c | 23 +++++++++++++++++++++-- lnet/klnds/o2iblnd/o2iblnd.c | 3 +++ lnet/klnds/socklnd/socklnd.c | 20 +++++++++++++++----- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/lnet/klnds/gnilnd/gnilnd.c b/lnet/klnds/gnilnd/gnilnd.c index c320d7d..375b87d 100644 --- a/lnet/klnds/gnilnd/gnilnd.c +++ b/lnet/klnds/gnilnd/gnilnd.c @@ -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; diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c index 4f321b6..5df62c8 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.c +++ b/lnet/klnds/o2iblnd/o2iblnd.c @@ -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); diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index e48a1d7..53102e1 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -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; } -- 1.8.3.1