Commit abe8a55f authored by Doug Oucharek's avatar Doug Oucharek Committed by Greg Kroah-Hartman
Browse files

staging: lustre: lnet: Enable setting per NI peer_credits



The code to allow peer_credits to be set per NI was originally
"left inactive" because there were concerns about peer_credits
interfering with the ability for IB nodes to connect to each
other when peer_credits are not the same (peer_credits controls
the queue depth for IB). With LU-3322, the values do not have
to match so it is now safe to enable this code so peer_credits
can be set per NI.

This patch enables existing code for setting per NI peer_credits.

Second this patch fixes a long standing bug in that the conf data
was not being used to set variables in the lnet_ni structure until
after lnd_startup() was called which meant LND drivers were
ignoring struct lnet_ni tunable values being set. Now we change
struct lnet_ni data fields based on conf data before calling
lnd_startup().

Signed-off-by: default avatarDoug Oucharek <doug.s.oucharek@intel.com>
Signed-off-by: default avatarJames Simmons <uja.ornl@yahoo.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-8507
Reviewed-on: http://review.whamcloud.com/21948


Reviewed-by: default avatarOlaf Weber <olaf@sgi.com>
Reviewed-by: default avatarDmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarJames Simmons <jsimmons@infradead.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9522bb7a
Loading
Loading
Loading
Loading
+19 −27
Original line number Diff line number Diff line
@@ -1286,6 +1286,25 @@ lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)
		       sizeof(*ni->ni_lnd_tunables));
	}

	/*
	 * If given some LND tunable parameters, parse those now to
	 * override the values in the NI structure.
	 */
	if (conf) {
		if (conf->cfg_config_u.cfg_net.net_peer_rtr_credits >= 0)
			ni->ni_peerrtrcredits =
				conf->cfg_config_u.cfg_net.net_peer_rtr_credits;
		if (conf->cfg_config_u.cfg_net.net_peer_timeout >= 0)
			ni->ni_peertimeout =
				conf->cfg_config_u.cfg_net.net_peer_timeout;
		if (conf->cfg_config_u.cfg_net.net_peer_tx_credits != -1)
			ni->ni_peertxcredits =
				conf->cfg_config_u.cfg_net.net_peer_tx_credits;
		if (conf->cfg_config_u.cfg_net.net_max_tx_credits >= 0)
			ni->ni_maxtxcredits =
				conf->cfg_config_u.cfg_net.net_max_tx_credits;
	}

	rc = lnd->lnd_startup(ni);

	mutex_unlock(&the_lnet.ln_lnd_mutex);
@@ -1299,33 +1318,6 @@ lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)
		goto failed0;
	}

	/*
	 * If given some LND tunable parameters, parse those now to
	 * override the values in the NI structure.
	 */
	if (conf && conf->cfg_config_u.cfg_net.net_peer_rtr_credits >= 0) {
		ni->ni_peerrtrcredits =
			conf->cfg_config_u.cfg_net.net_peer_rtr_credits;
	}
	if (conf && conf->cfg_config_u.cfg_net.net_peer_timeout >= 0) {
		ni->ni_peertimeout =
			conf->cfg_config_u.cfg_net.net_peer_timeout;
	}
	/*
	 * TODO
	 * Note: For now, don't allow the user to change
	 * peertxcredits as this number is used in the
	 * IB LND to control queue depth.
	 *
	 * if (conf && conf->cfg_config_u.cfg_net.net_peer_tx_credits != -1)
	 *	ni->ni_peertxcredits =
	 *		conf->cfg_config_u.cfg_net.net_peer_tx_credits;
	 */
	if (conf && conf->cfg_config_u.cfg_net.net_max_tx_credits >= 0) {
		ni->ni_maxtxcredits =
			conf->cfg_config_u.cfg_net.net_max_tx_credits;
	}

	LASSERT(ni->ni_peertimeout <= 0 || lnd->lnd_query);

	lnet_net_lock(LNET_LOCK_EX);