Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b30ccde authored by Amir Shehata's avatar Amir Shehata Committed by Greg Kroah-Hartman
Browse files

staging: lustre: lnet: enable configuration per NI interface



Add the ability to configure each NI interface at bring up.
Also give the ability for user land utilities to query the
configuration of each NI interface.

Signed-off-by: default avatarAmir Shehata <amir.shehata@intel.com>
Signed-off-by: default avatarJames Simmons <uja.ornl@yahoo.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7101
Reviewed-on: http://review.whamcloud.com/16367


Reviewed-by: default avatarDoug Oucharek <doug.s.oucharek@intel.com>
Reviewed-by: default avatarOlaf Weber <olaf@sgi.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 2c6a1845
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -1217,6 +1217,7 @@ lnet_shutdown_lndni(struct lnet_ni *ni)
static int
lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)
{
	struct lnet_ioctl_config_lnd_tunables *lnd_tunables = NULL;
	int rc = -EINVAL;
	int lnd_type;
	lnd_t *lnd;
@@ -1274,6 +1275,21 @@ lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)

	ni->ni_lnd = lnd;

	if (conf && conf->cfg_hdr.ioc_len > sizeof(*conf))
		lnd_tunables = (struct lnet_ioctl_config_lnd_tunables *)conf->cfg_bulk;

	if (lnd_tunables) {
		LIBCFS_ALLOC(ni->ni_lnd_tunables,
			     sizeof(*ni->ni_lnd_tunables));
		if (!ni->ni_lnd_tunables) {
			mutex_unlock(&the_lnet.ln_lnd_mutex);
			rc = -ENOMEM;
			goto failed0;
		}
		memcpy(ni->ni_lnd_tunables, lnd_tunables,
		       sizeof(*ni->ni_lnd_tunables));
	}

	rc = lnd->lnd_startup(ni);

	mutex_unlock(&the_lnet.ln_lnd_mutex);
@@ -1653,7 +1669,9 @@ EXPORT_SYMBOL(LNetNIFini);
static void
lnet_fill_ni_info(struct lnet_ni *ni, struct lnet_ioctl_config_data *config)
{
	struct lnet_ioctl_config_lnd_tunables *lnd_cfg = NULL;
	struct lnet_ioctl_net_config *net_config;
	size_t min_size, tunable_size = 0;
	int i;

	if (!ni || !config)
@@ -1691,6 +1709,30 @@ lnet_fill_ni_info(struct lnet_ni *ni, struct lnet_ioctl_config_data *config)

		config->cfg_ncpts = num_cpts;
	}

	/*
	 * See if user land tools sent in a newer and larger version
	 * of struct lnet_tunables than what the kernel uses.
	 */
	min_size = sizeof(*config) + sizeof(*net_config);

	if (config->cfg_hdr.ioc_len > min_size)
		tunable_size = config->cfg_hdr.ioc_len - min_size;

	/* Don't copy to much data to user space */
	min_size = min(tunable_size, sizeof(*ni->ni_lnd_tunables));
	lnd_cfg = (struct lnet_ioctl_config_lnd_tunables *)net_config->cfg_bulk;

	if (ni->ni_lnd_tunables && lnd_cfg && min_size) {
		memcpy(lnd_cfg, ni->ni_lnd_tunables, min_size);
		config->cfg_config_u.cfg_net.net_interface_count = 1;

		/* Tell user land that kernel side has less data */
		if (tunable_size > sizeof(*ni->ni_lnd_tunables)) {
			min_size = tunable_size - sizeof(ni->ni_lnd_tunables);
			config->cfg_hdr.ioc_len -= min_size;
		}
	}
}

static int