From: Simon Glass <simon.glass@canonical.com>
Remove the local 'struct completion' definition and the
wait_for_completion() function from ext4lm using linux/completion.h
instead. The header provides the same stub functionality via macros and
static inline functions.
Also fix linux/completion.h to use 'static inline' instead of just
'inline' for the U-Boot stub functions to prevent multiple definition
errors when the header is included in multiple C files.
Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
fs/ext4l/ext4_uboot.h | 8 +++-----
fs/ext4l/stub.c | 5 +----
include/linux/completion.h | 24 ++++++++++++------------
3 files changed, 16 insertions(+), 21 deletions(-)
@@ -126,10 +126,8 @@ struct lock_class_key { int dummy; };
#define rwsem_release(l, i) do { } while (0)
#define _THIS_IP_ ((unsigned long)0)
-/* completion - stub */
-struct completion {
- unsigned int done;
-};
+/* completion - use Linux header */
+#include <linux/completion.h>
/* Cache alignment - stub */
#define ____cacheline_aligned_in_smp
@@ -2135,7 +2133,7 @@ void invalidate_bdev(struct block_device *bdev);
/* Kobject - declarations for stub.c */
void kobject_put(struct kobject *kobj);
-void wait_for_completion(struct completion *comp);
+/* wait_for_completion is now a macro in linux/completion.h */
/* DAX - declaration for stub.c */
void fs_put_dax(void *dax, void *holder);
@@ -486,10 +486,7 @@ void kobject_put(struct kobject *kobj)
{
}
-/* completion */
-void wait_for_completion(struct completion *comp)
-{
-}
+/* completion - now uses linux/completion.h macro */
/* DAX */
void *fs_dax_get_by_bdev(struct block_device *bdev, u64 *start, u64 *len,
@@ -129,39 +129,39 @@ extern void complete_all(struct completion *);
#define wait_for_completion(x) do {} while (0)
#define wait_for_completion_io(x) do {} while (0)
-inline int wait_for_completion_interruptible(struct completion *x)
+static inline int wait_for_completion_interruptible(struct completion *x)
{
return 1;
}
-inline int wait_for_completion_killable(struct completion *x)
+static inline int wait_for_completion_killable(struct completion *x)
{
return 1;
}
-inline unsigned long wait_for_completion_timeout(struct completion *x,
- unsigned long timeout)
+static inline unsigned long wait_for_completion_timeout(struct completion *x,
+ unsigned long timeout)
{
return 1;
}
-inline unsigned long wait_for_completion_io_timeout(struct completion *x,
- unsigned long timeout)
+static inline unsigned long wait_for_completion_io_timeout(struct completion *x,
+ unsigned long timeout)
{
return 1;
}
-inline long wait_for_completion_interruptible_timeout(struct completion *x,
- unsigned long timeout)
+static inline long wait_for_completion_interruptible_timeout(struct completion *x,
+ unsigned long timeout)
{
return 1;
}
-inline long wait_for_completion_killable_timeout(struct completion *x,
- unsigned long timeout)
+static inline long wait_for_completion_killable_timeout(struct completion *x,
+ unsigned long timeout)
{
return 1;
}
-inline bool try_wait_for_completion(struct completion *x)
+static inline bool try_wait_for_completion(struct completion *x)
{
return 1;
}
-inline bool completion_done(struct completion *x)
+static inline bool completion_done(struct completion *x)
{
return 1;
}