net: ethtool: move checks before rtnl_lock() in ethnl_set_rings
Currently these two checks in ethnl_set_rings are added after rtnl_lock() which will do useless works if the request is invalid. So this patch moves these checks before the rtnl_lock() to avoid these costs. Signed-off-by: Jie Wang <wangjie125@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
This commit is contained in:
parent
202145b291
commit
f50e587136
|
@ -173,6 +173,24 @@ int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
|
||||||
if (!ops->get_ringparam || !ops->set_ringparam)
|
if (!ops->get_ringparam || !ops->set_ringparam)
|
||||||
goto out_dev;
|
goto out_dev;
|
||||||
|
|
||||||
|
if (tb[ETHTOOL_A_RINGS_RX_BUF_LEN] &&
|
||||||
|
!(ops->supported_ring_params & ETHTOOL_RING_USE_RX_BUF_LEN)) {
|
||||||
|
ret = -EOPNOTSUPP;
|
||||||
|
NL_SET_ERR_MSG_ATTR(info->extack,
|
||||||
|
tb[ETHTOOL_A_RINGS_RX_BUF_LEN],
|
||||||
|
"setting rx buf len not supported");
|
||||||
|
goto out_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[ETHTOOL_A_RINGS_CQE_SIZE] &&
|
||||||
|
!(ops->supported_ring_params & ETHTOOL_RING_USE_CQE_SIZE)) {
|
||||||
|
ret = -EOPNOTSUPP;
|
||||||
|
NL_SET_ERR_MSG_ATTR(info->extack,
|
||||||
|
tb[ETHTOOL_A_RINGS_CQE_SIZE],
|
||||||
|
"setting cqe size not supported");
|
||||||
|
goto out_dev;
|
||||||
|
}
|
||||||
|
|
||||||
if (tb[ETHTOOL_A_RINGS_TX_PUSH] &&
|
if (tb[ETHTOOL_A_RINGS_TX_PUSH] &&
|
||||||
!(ops->supported_ring_params & ETHTOOL_RING_USE_TX_PUSH)) {
|
!(ops->supported_ring_params & ETHTOOL_RING_USE_TX_PUSH)) {
|
||||||
ret = -EOPNOTSUPP;
|
ret = -EOPNOTSUPP;
|
||||||
|
@ -222,24 +240,6 @@ int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
|
||||||
goto out_ops;
|
goto out_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kernel_ringparam.rx_buf_len != 0 &&
|
|
||||||
!(ops->supported_ring_params & ETHTOOL_RING_USE_RX_BUF_LEN)) {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
NL_SET_ERR_MSG_ATTR(info->extack,
|
|
||||||
tb[ETHTOOL_A_RINGS_RX_BUF_LEN],
|
|
||||||
"setting rx buf len not supported");
|
|
||||||
goto out_ops;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (kernel_ringparam.cqe_size &&
|
|
||||||
!(ops->supported_ring_params & ETHTOOL_RING_USE_CQE_SIZE)) {
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
NL_SET_ERR_MSG_ATTR(info->extack,
|
|
||||||
tb[ETHTOOL_A_RINGS_CQE_SIZE],
|
|
||||||
"setting cqe size not supported");
|
|
||||||
goto out_ops;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = dev->ethtool_ops->set_ringparam(dev, &ringparam,
|
ret = dev->ethtool_ops->set_ringparam(dev, &ringparam,
|
||||||
&kernel_ringparam, info->extack);
|
&kernel_ringparam, info->extack);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
Loading…
Reference in New Issue