Skip to content

Commit

Permalink
net: introduce helper dev_change_tx_queue_len()
Browse files Browse the repository at this point in the history
This patch promotes the local change_tx_queue_len() to a core
helper function, dev_change_tx_queue_len(), so that rtnetlink
and net-sysfs could share the code. This also prepares for the
following patch.

Note, the -EFAULT in the original code doesn't make sense,
we should propagate the errno from notifiers.

Cc: John Fastabend <[email protected]>
Signed-off-by: Cong Wang <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
congwang authored and davem330 committed Jan 29, 2018
1 parent 4cd8795 commit 6a643dd
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 37 deletions.
1 change: 1 addition & 0 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -3331,6 +3331,7 @@ int dev_get_alias(const struct net_device *, char *, size_t);
int dev_change_net_namespace(struct net_device *, struct net *, const char *);
int __dev_set_mtu(struct net_device *, int);
int dev_set_mtu(struct net_device *, int);
int dev_change_tx_queue_len(struct net_device *, unsigned long);
void dev_set_group(struct net_device *, int);
int dev_set_mac_address(struct net_device *, struct sockaddr *);
int dev_change_carrier(struct net_device *, bool new_carrier);
Expand Down
28 changes: 28 additions & 0 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -7047,6 +7047,34 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
}
EXPORT_SYMBOL(dev_set_mtu);

/**
* dev_change_tx_queue_len - Change TX queue length of a netdevice
* @dev: device
* @new_len: new tx queue length
*/
int dev_change_tx_queue_len(struct net_device *dev, unsigned long new_len)
{
unsigned int orig_len = dev->tx_queue_len;
int res;

if (new_len != (unsigned int)new_len)
return -ERANGE;

if (new_len != orig_len) {
dev->tx_queue_len = new_len;
res = call_netdevice_notifiers(NETDEV_CHANGE_TX_QUEUE_LEN, dev);
res = notifier_to_errno(res);
if (res) {
netdev_err(dev,
"refused to change device tx_queue_len\n");
dev->tx_queue_len = orig_len;
return res;
}
}

return 0;
}

/**
* dev_set_group - Change group this device belongs to
* @dev: device
Expand Down
25 changes: 1 addition & 24 deletions net/core/net-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,37 +346,14 @@ static ssize_t flags_store(struct device *dev, struct device_attribute *attr,
}
NETDEVICE_SHOW_RW(flags, fmt_hex);

static int change_tx_queue_len(struct net_device *dev, unsigned long new_len)
{
unsigned int orig_len = dev->tx_queue_len;
int res;

if (new_len != (unsigned int)new_len)
return -ERANGE;

if (new_len != orig_len) {
dev->tx_queue_len = new_len;
res = call_netdevice_notifiers(NETDEV_CHANGE_TX_QUEUE_LEN, dev);
res = notifier_to_errno(res);
if (res) {
netdev_err(dev,
"refused to change device tx_queue_len\n");
dev->tx_queue_len = orig_len;
return -EFAULT;
}
}

return 0;
}

static ssize_t tx_queue_len_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
if (!capable(CAP_NET_ADMIN))
return -EPERM;

return netdev_store(dev, attr, buf, len, change_tx_queue_len);
return netdev_store(dev, attr, buf, len, dev_change_tx_queue_len);
}
NETDEVICE_SHOW_RW(tx_queue_len, fmt_dec);

Expand Down
18 changes: 5 additions & 13 deletions net/core/rtnetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -2337,19 +2337,11 @@ static int do_setlink(const struct sk_buff *skb,

if (tb[IFLA_TXQLEN]) {
unsigned int value = nla_get_u32(tb[IFLA_TXQLEN]);
unsigned int orig_len = dev->tx_queue_len;

if (dev->tx_queue_len ^ value) {
dev->tx_queue_len = value;
err = call_netdevice_notifiers(
NETDEV_CHANGE_TX_QUEUE_LEN, dev);
err = notifier_to_errno(err);
if (err) {
dev->tx_queue_len = orig_len;
goto errout;
}
status |= DO_SETLINK_MODIFIED;
}

err = dev_change_tx_queue_len(dev, value);
if (err)
goto errout;
status |= DO_SETLINK_MODIFIED;
}

if (tb[IFLA_GSO_MAX_SIZE]) {
Expand Down

0 comments on commit 6a643dd

Please sign in to comment.