[Concept,09/33] ext4l: Move generic VFS operations to linux/fs.h

Message ID 20260121220857.2137568-10-sjg@u-boot.org
State New
Headers
Series Reorganise ext4l compatibility stubs |

Commit Message

Simon Glass Jan. 21, 2026, 10:08 p.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

Move the generic VFS operation stubs from ext4_uboot.h to
include/linux/fs.h where they belong.

This includes:
- generic_file_read_iter(), generic_write_checks()
- generic_perform_write(), generic_write_sync()
- generic_atomic_write_valid()
- generic_buffers_fsync_noflush()
- generic_fillattr(), generic_fill_statx_atomic_writes()
- generic_file_llseek_size()
- generic_ci_validate_strict_name()
- generic_read_dir(), generic_check_addressable()

Co-developed-by: Claude (Anthropic)
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 fs/ext4l/ext4_uboot.h | 21 +--------------------
 include/linux/fs.h    | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 20 deletions(-)
  

Patch

diff --git a/fs/ext4l/ext4_uboot.h b/fs/ext4l/ext4_uboot.h
index d3ad76f2618..35626a95cf8 100644
--- a/fs/ext4l/ext4_uboot.h
+++ b/fs/ext4l/ext4_uboot.h
@@ -224,18 +224,10 @@  struct dx_hash_info {
 #define file_modified(file)		({ (void)(file); 0; })
 #define file_accessed(file)		do { (void)(file); } while (0)
 
-/* Generic file operations - stubs for file.c */
-#define generic_file_read_iter(iocb, to)	({ (void)(iocb); (void)(to); 0L; })
-#define generic_write_checks(iocb, from)	({ (void)(iocb); (void)(from); 0L; })
-#define generic_perform_write(iocb, from)	({ (void)(iocb); (void)(from); 0L; })
-#define generic_write_sync(iocb, count)		({ (void)(iocb); (count); })
-#define generic_atomic_write_valid(iocb, from)	({ (void)(iocb); (void)(from); 0; })
 #define vfs_setpos(file, offset, maxsize)	({ (void)(file); (void)(maxsize); (offset); })
 
 #define daxdev_mapping_supported(f, i, d) ({ (void)(f); (void)(i); (void)(d); 1; })
 
-#define generic_ci_validate_strict_name(d, n)	({ (void)(d); (void)(n); 1; })
-
 #include <linux/minmax.h>
 
 /* Memory retry wait */
@@ -284,7 +276,6 @@  struct dx_hash_info {
 /* Sync operations - stubs */
 #define sync_mapping_buffers(m)			({ (void)(m); 0; })
 #define sync_inode_metadata(i, w)		({ (void)(i); (void)(w); 0; })
-#define generic_buffers_fsync_noflush(f, s, e, d) ({ (void)(f); (void)(s); (void)(e); (void)(d); 0; })
 #define file_write_and_wait_range(f, s, e)	({ (void)(f); (void)(s); (void)(e); 0; })
 #define file_check_and_advance_wb_err(f)	({ (void)(f); 0; })
 
@@ -311,8 +302,6 @@  extern struct inode *iget_locked(struct super_block *sb, unsigned long ino);
 #define setattr_prepare(m, d, a)	({ (void)(m); (void)(d); (void)(a); 0; })
 #define setattr_copy(m, i, a)		do { } while (0)
 #define posix_acl_chmod(m, i, mo)	({ (void)(m); (void)(i); (void)(mo); 0; })
-#define generic_fillattr(m, req, i, s)	do { } while (0)
-#define generic_fill_statx_atomic_writes(s, u_m, u_M, g) do { } while (0)
 
 /* File operations */
 #define file_update_time(f)		do { } while (0)
@@ -332,13 +321,6 @@  extern struct inode *iget_locked(struct super_block *sb, unsigned long ino);
 /* FSTR_INIT - fscrypt_str initializer (fscrypt_str defined in ext4_fscrypt.h) */
 #define FSTR_INIT(n, l)		{ .name = (n), .len = (l) }
 
-/* File llseek */
-#define generic_file_llseek_size(f, o, w, m, e)	({ (void)(f); (void)(o); (void)(w); (void)(m); (void)(e); 0LL; })
-
-/* generic_read_dir - stub function (needs to be a real function for struct init) */
-ssize_t generic_read_dir(struct file *f, char __user *buf, size_t count,
-			 loff_t *ppos);
-
 /* struct_size - use linux/overflow.h */
 #include <linux/overflow.h>
 
@@ -472,8 +454,7 @@  void free_page(unsigned long addr);
 void *fs_dax_get_by_bdev(struct block_device *bdev, u64 *start, u64 *len,
 			 void *holder);
 
-/* Block device size - declarations for stub.c */
-int generic_check_addressable(unsigned int blocksize_bits, u64 num_blocks);
+/* Block device size - declaration for stub.c */
 unsigned int bdev_max_discard_sectors(struct block_device *bdev);
 #include <linux/mbcache.h>
 
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f50a081b32b..3fa54146f44 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -638,4 +638,37 @@  struct inode_operations {
 		       umode_t);
 };
 
+/*
+ * Generic VFS operations - stubs for U-Boot
+ */
+
+/* Generic file I/O operations */
+#define generic_file_read_iter(iocb, to)	({ (void)(iocb); (void)(to); 0L; })
+#define generic_write_checks(iocb, from)	({ (void)(iocb); (void)(from); 0L; })
+#define generic_perform_write(iocb, from)	({ (void)(iocb); (void)(from); 0L; })
+#define generic_write_sync(iocb, count)		({ (void)(iocb); (count); })
+#define generic_atomic_write_valid(iocb, from)	({ (void)(iocb); (void)(from); 0; })
+
+/* Generic fsync operation */
+#define generic_buffers_fsync_noflush(f, s, e, d) \
+	({ (void)(f); (void)(s); (void)(e); (void)(d); 0; })
+
+/* Generic attribute operations */
+#define generic_fillattr(m, req, i, s)	do { } while (0)
+#define generic_fill_statx_atomic_writes(s, u_m, u_M, g) do { } while (0)
+
+/* Generic seek operation */
+#define generic_file_llseek_size(f, o, w, m, e) \
+	({ (void)(f); (void)(o); (void)(w); (void)(m); (void)(e); 0LL; })
+
+/* Case-insensitive name validation - not supported */
+#define generic_ci_validate_strict_name(d, n)	({ (void)(d); (void)(n); 1; })
+
+/* Generic directory read - implemented in ext4l/stub.c */
+ssize_t generic_read_dir(struct file *f, char __user *buf, size_t count,
+			 loff_t *ppos);
+
+/* Block addressability check - implemented in ext4l/stub.c */
+int generic_check_addressable(unsigned int blocksize_bits, u64 num_blocks);
+
 #endif /* _LINUX_FS_H */