Allow mlx4 devices to switch from Ethernet to Infiniband (and vice versa):

- Fix sysctl wrapper for sysfs attributes to properly handle new string
  values similar to sysctl_handle_string() (only copyin the user's
  supplied length and nul-terminate the string).
- Don't check for a trailing newline when evaluating the desired operating
  mode of a mlx4 device.

PR:		kern/179999
Submitted by:	Shahar Klein <shahark@mellanox.com>
MFC after:	1 week
This commit is contained in:
John Baldwin 2013-07-08 21:25:12 +00:00
parent c64bc3a076
commit 335349690f
2 changed files with 10 additions and 5 deletions

View File

@ -479,11 +479,11 @@ static ssize_t set_port_type(struct device *dev,
int i; int i;
int err = 0; int err = 0;
if (!strcmp(buf, "ib\n")) if (!strcmp(buf, "ib"))
info->tmp_type = MLX4_PORT_TYPE_IB; info->tmp_type = MLX4_PORT_TYPE_IB;
else if (!strcmp(buf, "eth\n")) else if (!strcmp(buf, "eth"))
info->tmp_type = MLX4_PORT_TYPE_ETH; info->tmp_type = MLX4_PORT_TYPE_ETH;
else if (!strcmp(buf, "auto\n")) else if (!strcmp(buf, "auto"))
info->tmp_type = MLX4_PORT_TYPE_AUTO; info->tmp_type = MLX4_PORT_TYPE_AUTO;
else { else {
mlx4_err(mdev, "%s is not supported port type\n", buf); mlx4_err(mdev, "%s is not supported port type\n", buf);

View File

@ -104,10 +104,15 @@ sysctl_handle_attr(SYSCTL_HANDLER_ARGS)
error = SYSCTL_OUT(req, buf, len); error = SYSCTL_OUT(req, buf, len);
if (error || !req->newptr || ops->store == NULL) if (error || !req->newptr || ops->store == NULL)
goto out; goto out;
error = SYSCTL_IN(req, buf, PAGE_SIZE); len = req->newlen - req->newidx;
if (len >= PAGE_SIZE)
error = EINVAL;
else
error = SYSCTL_IN(req, buf, len);
if (error) if (error)
goto out; goto out;
len = ops->store(kobj, attr, buf, req->newlen); ((char *)buf)[len] = '\0';
len = ops->store(kobj, attr, buf, len);
if (len < 0) if (len < 0)
error = -len; error = -len;
out: out: