summaryrefslogtreecommitdiff
path: root/net/ethtool/netlink.c
diff options
context:
space:
mode:
authorHeiner Kallweit <hkallweit1@gmail.com>2021-08-01 12:40:05 +0200
committerDavid S. Miller <davem@davemloft.net>2021-08-03 12:58:22 +0100
commit41107ac22fcf39c45afaf1a59e259e5e0059e31a (patch)
treead68924aa2b0cb7fd6341ab818a6a245f1c1d84d /net/ethtool/netlink.c
parentc5ab51df03e2d7ec8e57904aaa2c4d03b607b2b5 (diff)
ethtool: move netif_device_present check from ethnl_parse_header_dev_get to ethnl_ops_begin
If device is runtime-suspended and not accessible then it may be flagged as not present. If checking whether device is present is done too early then we may bail out before we have the chance to runtime-resume the device. Therefore move this check to ethnl_ops_begin(). This is in preparation of a follow-up patch that tries to runtime-resume the device before executing ethtool ops. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ethtool/netlink.c')
-rw-r--r--net/ethtool/netlink.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c
index ac720d684789..e628d17f595c 100644
--- a/net/ethtool/netlink.c
+++ b/net/ethtool/netlink.c
@@ -31,7 +31,13 @@ const struct nla_policy ethnl_header_policy_stats[] = {
int ethnl_ops_begin(struct net_device *dev)
{
- if (dev && dev->ethtool_ops->begin)
+ if (!dev)
+ return 0;
+
+ if (!netif_device_present(dev))
+ return -ENODEV;
+
+ if (dev->ethtool_ops->begin)
return dev->ethtool_ops->begin(dev);
else
return 0;
@@ -115,12 +121,6 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info,
return -EINVAL;
}
- if (dev && !netif_device_present(dev)) {
- dev_put(dev);
- NL_SET_ERR_MSG(extack, "device not present");
- return -ENODEV;
- }
-
req_info->dev = dev;
req_info->flags = flags;
return 0;