summaryrefslogtreecommitdiffstats
path: root/net/devlink
diff options
context:
space:
mode:
authorJiri Pirko <jiri@nvidia.com>2026-03-12 11:03:57 +0100
committerJakub Kicinski <kuba@kernel.org>2026-03-14 13:08:47 -0700
commite2e3666fd3609bfc03c42bd8544be8cbd080d24d (patch)
treed94de8d9bd27b4b04d5554738d2ec9b8ae9eebfd /net/devlink
parent0f5531879afbf904f19a15b39f687a9ec47a82cc (diff)
downloadlinux-e2e3666fd3609bfc03c42bd8544be8cbd080d24d.tar.gz
linux-e2e3666fd3609bfc03c42bd8544be8cbd080d24d.zip
devlink: avoid extra iterations when found devlink is not registered
Since the one found is not registered, very unlikely another one with the same bus_name/dev_name is going to be found. Stop right away and prepare common "found" path for the follow-up patch. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Link: https://patch.msgid.link/20260312100407.551173-4-jiri@resnulli.us Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/devlink')
-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,