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)
|
||||
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] &&
|
||||
!(ops->supported_ring_params & ETHTOOL_RING_USE_TX_PUSH)) {
|
||||
ret = -EOPNOTSUPP;
|
||||
|
@ -222,24 +240,6 @@ int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
|
|||
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,
|
||||
&kernel_ringparam, info->extack);
|
||||
if (ret < 0)
|
||||
|
|
Loading…
Reference in New Issue