Whamcloud - gitweb
LU-11371 socklnd: dynamically set LND parameters 91/33191/4
authorSonia Sharma <sharmaso@whamcloud.com>
Sun, 2 Sep 2018 10:32:17 +0000 (06:32 -0400)
committerOleg Drokin <green@whamcloud.com>
Fri, 2 Nov 2018 07:17:45 +0000 (07:17 +0000)
Currently, the socklnd parameters cannot be set
dynamically. Only the default values are set
which cannot be changed by deleting and
re-adding the net with DLC.

This patch allows setting socklnd parameters
dynamically.

Change-Id: Ied9c300833b4d1352ca4d94c3b6886ed8d5eb901
Test-Parameters: trivial
Signed-off-by: Sonia Sharma <sharmaso@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/33191
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Doug Oucharek <dougso@me.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/klnds/socklnd/socklnd.c

index 001fef6..dd59e93 100644 (file)
@@ -2797,6 +2797,7 @@ int
 ksocknal_startup(struct lnet_ni *ni)
 {
        struct ksock_net *net;
+       struct lnet_ioctl_config_lnd_cmn_tunables *net_tunables;
        int rc;
        int i;
        struct net_device *net_dev;
@@ -2817,18 +2818,28 @@ ksocknal_startup(struct lnet_ni *ni)
        spin_lock_init(&net->ksnn_lock);
        net->ksnn_incarnation = ktime_get_real_ns();
        ni->ni_data = net;
-       if (!ni->ni_net->net_tunables_set) {
-               ni->ni_net->net_tunables.lct_peer_timeout =
+       net_tunables = &ni->ni_net->net_tunables;
+
+       if (net_tunables->lct_peer_timeout == -1)
+               net_tunables->lct_peer_timeout =
                        *ksocknal_tunables.ksnd_peertimeout;
-               ni->ni_net->net_tunables.lct_max_tx_credits =
+
+       if (net_tunables->lct_max_tx_credits == -1)
+               net_tunables->lct_max_tx_credits =
                        *ksocknal_tunables.ksnd_credits;
-               ni->ni_net->net_tunables.lct_peer_tx_credits =
+
+       if (net_tunables->lct_peer_tx_credits == -1)
+               net_tunables->lct_peer_tx_credits =
                        *ksocknal_tunables.ksnd_peertxcredits;
-               ni->ni_net->net_tunables.lct_peer_rtr_credits =
-                       *ksocknal_tunables.ksnd_peerrtrcredits;
-               ni->ni_net->net_tunables_set = true;
-       }
 
+       if (net_tunables->lct_peer_tx_credits >
+           net_tunables->lct_max_tx_credits)
+               net_tunables->lct_peer_tx_credits =
+                       net_tunables->lct_max_tx_credits;
+
+       if (net_tunables->lct_peer_rtr_credits == -1)
+               net_tunables->lct_peer_rtr_credits =
+                       *ksocknal_tunables.ksnd_peerrtrcredits;
 
        if (ni->ni_interfaces[0] == NULL) {
                rc = ksocknal_enumerate_interfaces(net);