When any NET or LND tunable is specified via CLI or yaml, then the
whole tunables struct gets memset to 0, or in the case of yaml config,
0 gets assigned to any tunable that isn't specified in the yaml. This
causes a problem for map_on_demand because 0 is a valid value for that
parameter, and ko2iblnd cannot know whether the user specified that 0
should be used or if DLC is specifying that the parameter was unset.
Rather than setting this parameter to 0 in the LND tunables struct,
have DLC set it to UINT_MAX to indicate that ko2iblnd should use the
value of the kernel module parameter.
Test-Parameters: trivial
HPE-bug-id: LUS-10740
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: I303e64d4d402ba61b5ae3e3910873f192a4a2845
Reviewed-on: https://review.whamcloud.com/46492
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
net_tunables->lct_peer_tx_credits =
net_tunables->lct_max_tx_credits;
+ if (tunables->lnd_map_on_demand == UINT_MAX)
+ tunables->lnd_map_on_demand = map_on_demand;
+
#ifndef HAVE_IB_GET_DMA_MR
/*
* For kernels which do not support global memory regions, always
map_on_demand = cYAML_get_object_item(lndparams, "map_on_demand");
lnd_cfg->lnd_map_on_demand =
- (map_on_demand) ? map_on_demand->cy_valueint : 0;
+ (map_on_demand) ? map_on_demand->cy_valueint : UINT_MAX;
concurrent_sends = cYAML_get_object_item(lndparams, "concurrent_sends");
lnd_cfg->lnd_concurrent_sends =
found = true;
}
+ if (found && LNET_NETTYP(nw_descr.nw_id) == O2IBLND)
+ tunables.lt_tun.lnd_tun_u.lnd_o2ib.lnd_map_on_demand = UINT_MAX;
+
rc = lustre_lnet_config_ni(&nw_descr,
(cpt_rc == 0) ? global_cpts: NULL,
ip2net, (found) ? &tunables : NULL,