summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Brauner <brauner@kernel.org>2025-07-11 15:47:48 +0200
committerChristian Brauner <brauner@kernel.org>2025-07-11 16:01:07 +0200
commit5c21c5f22d0701ac6c1cafc0e8de4bf42e5c53e5 (patch)
treecf641185351a12a3dce4595fe4a77c572aada9ab
parenta6ed5691b2428cc578908ee050d5d4908a6e065e (diff)
cleanup: add a scoped version of CLASS()
This will make it possible to use: scoped_class() { } constructs to limit variables to certain scopes and still perform auto-cleanup. Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r--include/linux/cleanup.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h
index 7093e1d08af0..bee606bebaca 100644
--- a/include/linux/cleanup.h
+++ b/include/linux/cleanup.h
@@ -277,6 +277,14 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
class_##_name##_t var __cleanup(class_##_name##_destructor) = \
class_##_name##_constructor
+#define scoped_class(_name, var, args) \
+ for (CLASS(_name, var)(args); \
+ __guard_ptr(_name)(&var) || !__is_cond_ptr(_name); \
+ ({ goto _label; })) \
+ if (0) { \
+_label: \
+ break; \
+ } else
/*
* DEFINE_GUARD(name, type, lock, unlock):