summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/devlink/netlink.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/net/devlink/netlink.c b/net/devlink/netlink.c
index 56817b85a3f9..7b205f677b7a 100644
--- a/net/devlink/netlink.c
+++ b/net/devlink/netlink.c
@@ -194,16 +194,20 @@ devlink_get_from_attrs_lock(struct net *net, struct nlattr **attrs,
devlinks_xa_for_each_registered_get(net, index, devlink) {
if (strcmp(devlink_bus_name(devlink), busname) == 0 &&
- strcmp(devlink_dev_name(devlink), devname) == 0) {
- devl_dev_lock(devlink, dev_lock);
- if (devl_is_registered(devlink))
- return devlink;
- devl_dev_unlock(devlink, dev_lock);
- }
+ strcmp(devlink_dev_name(devlink), devname) == 0)
+ goto found;
devlink_put(devlink);
}
return ERR_PTR(-ENODEV);
+
+found:
+ devl_dev_lock(devlink, dev_lock);
+ if (devl_is_registered(devlink))
+ return devlink;
+ devl_dev_unlock(devlink, dev_lock);
+ devlink_put(devlink);
+ return ERR_PTR(-ENODEV);
}
static int __devlink_nl_pre_doit(struct sk_buff *skb, struct genl_info *info,