Even if it's not critical, the avoidance of checking the error code from devm_mutex_init() call today diminishes the point of using devm variant of it. Tomorrow it may even leak something. Enforce all callers checking the return value through the compiler. As devm_mutex_init() itself is a macro which can not be annotated, annotate __devm_mutex_init() instead. Unfortunately __must_check/warn_unused_result don't propagate through statement expression. To work around this move the statement expression into the argument list of the call to __devm_mutex_init() so devm_mutex_init() directly expands to __devm_mutex_init(). Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> --- include/linux/mutex.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/include/linux/mutex.h b/include/linux/mutex.h index 2bf91b57591b49e4668752e773419ae945f124da..65b28c9e6efc123982d923d1ed171eae471c82c1 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h @@ -126,11 +126,11 @@ do { \ #ifdef CONFIG_DEBUG_MUTEXES -int __devm_mutex_init(struct device *dev, struct mutex *lock); +int __must_check __devm_mutex_init(struct device *dev, struct mutex *lock); #else -static inline int __devm_mutex_init(struct device *dev, struct mutex *lock) +static inline int __must_check __devm_mutex_init(struct device *dev, struct mutex *lock) { /* * When CONFIG_DEBUG_MUTEXES is off mutex_destroy() is just a nop so @@ -141,13 +141,12 @@ static inline int __devm_mutex_init(struct device *dev, struct mutex *lock) #endif -#define devm_mutex_init(dev, mutex) \ -({ \ - typeof(mutex) mutex_ = (mutex); \ - \ - mutex_init(mutex_); \ - __devm_mutex_init(dev, mutex_); \ -}) +#define devm_mutex_init(dev, mutex) __devm_mutex_init(dev, ({ \ + typeof(mutex) mutex_ = (mutex); \ + \ + mutex_init(mutex_); \ + mutex_; \ +})) /* * See kernel/locking/mutex.c for detailed documentation of these APIs. -- 2.48.1