From: Danilo Krummrich Date: Mon, 2 Feb 2026 23:48:20 +0000 (+0100) Subject: devres: remove unnecessary unlocks in devres_release_group() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c321a511e37c3aaa16226b3529c30b78f9e380c1;p=thirdparty%2Flinux.git devres: remove unnecessary unlocks in devres_release_group() There is no need to call spin_unlock_irqrestore() in every conditional block, as release_nodes() can safely be called with an empty list, in case we hit the "if else" or "else" case. We do not use a scoped_guard() here to not unnecessarily change the indentation level. Reviewed-by: Greg Kroah-Hartman Link: https://patch.msgid.link/20260202235210.55176-8-dakr@kernel.org Signed-off-by: Danilo Krummrich --- diff --git a/drivers/base/devres.c b/drivers/base/devres.c index dadc185251fb8..8fa54a3ed1204 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -712,7 +712,6 @@ int devres_release_group(struct device *dev, void *id) int cnt = 0; spin_lock_irqsave(&dev->devres_lock, flags); - grp = find_group(dev, id); if (grp) { struct list_head *first = &grp->node[0].entry; @@ -722,20 +721,18 @@ int devres_release_group(struct device *dev, void *id) end = grp->node[1].entry.next; cnt = remove_nodes(dev, first, end, &todo); - spin_unlock_irqrestore(&dev->devres_lock, flags); - - release_nodes(dev, &todo); } else if (list_empty(&dev->devres_head)) { /* * dev is probably dying via devres_release_all(): groups * have already been removed and are on the process of * being released - don't touch and don't warn. */ - spin_unlock_irqrestore(&dev->devres_lock, flags); } else { WARN_ON(1); - spin_unlock_irqrestore(&dev->devres_lock, flags); } + spin_unlock_irqrestore(&dev->devres_lock, flags); + + release_nodes(dev, &todo); return cnt; }