From patchwork Tue Jan 20 23:43:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1720 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768952713; bh=XT+yo3rMnifxur/Ti/t7zHUVx3f2In0x2IeJKlUerTA=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=lsS292JjGy6MhUqOFHYK8It7DDFzgfp6/+HSZ5W8A8vyjWNgegFSRrYpBHyLP7Ht7 tvhKP8BiBlU+DRbJJy33UC/gqo0GH8ze5Ggpfzr/KAYGQ1azeqlSV7cX+0O3bCaym1 gbVbdbj50pPxIDyeR7wSymamKsPZv8kclSmvw4BklefTnvrdHQ08SNnoIgu5Cy5kNS ZVJSAuCM0Ithgy7rgang5dDuQIfoV63PMBF6clKPfJ9q8OKRrBd/oZI7DE57zODFI0 /QQox07xK4UKvVTdbwUnSkKaRxyUR5SVv0Tm2DX6AsPMsSnotiU5vRvE6ytOhsiZB9 wZfuLt85Y99JA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 6149469555 for ; Tue, 20 Jan 2026 16:45:13 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id p_au2lm82DEW for ; Tue, 20 Jan 2026 16:45:13 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768952713; bh=XT+yo3rMnifxur/Ti/t7zHUVx3f2In0x2IeJKlUerTA=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=lsS292JjGy6MhUqOFHYK8It7DDFzgfp6/+HSZ5W8A8vyjWNgegFSRrYpBHyLP7Ht7 tvhKP8BiBlU+DRbJJy33UC/gqo0GH8ze5Ggpfzr/KAYGQ1azeqlSV7cX+0O3bCaym1 gbVbdbj50pPxIDyeR7wSymamKsPZv8kclSmvw4BklefTnvrdHQ08SNnoIgu5Cy5kNS ZVJSAuCM0Ithgy7rgang5dDuQIfoV63PMBF6clKPfJ9q8OKRrBd/oZI7DE57zODFI0 /QQox07xK4UKvVTdbwUnSkKaRxyUR5SVv0Tm2DX6AsPMsSnotiU5vRvE6ytOhsiZB9 wZfuLt85Y99JA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 4FD6A695A6 for ; Tue, 20 Jan 2026 16:45:13 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768952710; bh=Z9HGOlVA1kGTTO/FulYtasG08N5+IqT6/EuDCH1US/w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qvp00kpznP9QWDF1t458YRuJ6y7eDAYsB7wV4OBE/tIbJoTxLrGWNrshHbQdlLO6R NPtL6RC08vivGLHLkkiC6IP6Vxc1jyLkWGMYNGPMmm9UhvQ2w/8D47B7wuDU+ihJ3n SfbmNHjGNghcmY5kBrUTTkZyKVxJHhYpXvVZDimvTYZVT+0zfKc3WRBlkoA13yWTwO P0upRC8p6n5GvvtwBvDbQph74w1gKGyUeapkaP0t8auQZ5IwOXFqnzG7Fu8jEyuWIb +IN6UbMAm+fbj4HB97Ya+TtfyaNwoy03mpAWc77LGSugNvZGLyNgoRufUtJDMFa1BZ KMcDhUo3epHbw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 4DA56695A6; Tue, 20 Jan 2026 16:45:10 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id ov0l3rsvWphx; Tue, 20 Jan 2026 16:45:10 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768952708; bh=C63HAWL3hG+rcXCYl0pvKRC/v9y86+ExJif6fYp2m1M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vn1iXjrDOQVHXZBcgB8DePFKvK2m13Yv/r+CD3J3TRYh/ba73VpQya3jCeIeIJ+xE GFu6exdAs6h22x9C78cXXuoKzA45KBgWooorZjgDOBrBH2/BdwW83zLqNKTmonyF9M lckuN3JimqylCkXSz5mLkfFZsZ7ZQAZLD1vGz/YFxcKXcgG/REl3yJbObBssqo9xcR gp+ZY9dGQKqahSGE+XANEpRXK7HrZggyLp2/FBMZvHBdopQ8PYiJnQyFmrYKGssgk5 NkvUcggjayS3g7+1LA3E3g9nn+s8umK2hhq8aKIRdwQdywFX2V4qo9Uc9BAwZ4aORL 4ilhyfhvMnLlg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id AA03D69555; Tue, 20 Jan 2026 16:45:08 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Tue, 20 Jan 2026 16:43:32 -0700 Message-ID: <20260120234344.495605-13-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260120234344.495605-1-sjg@u-boot.org> References: <20260120234344.495605-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: QRF7VU35SSP6OQ3HT6F344E7NTGE5MCR X-Message-ID-Hash: QRF7VU35SSP6OQ3HT6F344E7NTGE5MCR X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Simon Glass , "Claude Opus 4 . 5" X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 12/17] ext4l: Move inode stubs to proper headers List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Move inode-related stubs to their proper Linux headers: - inode_io_list_del() to linux/writeback.h - inode_is_open_for_write(), inode_is_dirtytime_only() to linux/fs.h - icount_read(), i_uid_write(), i_gid_write(), inode_fsuid_set() to linux/fs.h - inode_init_owner(), insert_inode_locked(), unlock_new_inode() to linux/fs.h - clear_nlink(), set_nlink(), inc_nlink(), drop_nlink() to linux/fs.h - IS_NOQUOTA(), IS_SWAPFILE() to linux/fs.h - inode_set_ctime_current(), inode_set_mtime_to_ts(), inode_set_flags() to linux/fs.h - inode_set_cached_link(), init_special_inode(), make_bad_inode() to linux/fs.h - iget_failed(), find_inode_by_ino_rcu(), mark_inode_dirty() to linux/fs.h - invalidate_inode_buffers(), clear_inode() to linux/fs.h - i_uid_needs_update(), i_gid_needs_update(), i_uid_update(), i_gid_update() - lock_two_nondirectories(), unlock_two_nondirectories() to linux/fs.h - alloc_inode_sb(), inode_generic_drop() to linux/fs.h Co-developed-by: Claude Opus 4.5 Signed-off-by: Simon Glass --- fs/ext4l/ext4_uboot.h | 66 ++++++++++----------------------------- include/linux/fs.h | 53 +++++++++++++++++++++++++++++++ include/linux/writeback.h | 8 +++++ 3 files changed, 78 insertions(+), 49 deletions(-) diff --git a/fs/ext4l/ext4_uboot.h b/fs/ext4l/ext4_uboot.h index 4ec4d713eb4..49dd566262b 100644 --- a/fs/ext4l/ext4_uboot.h +++ b/fs/ext4l/ext4_uboot.h @@ -214,9 +214,7 @@ /* Quota operations - use linux/quotaops.h */ #include -/* icount - inode reference count */ -#define icount_read(inode) (1) - +/* icount_read is in linux/fs.h */ /* d_inode is now in linux/dcache.h */ /* Random number functions - use linux/random.h */ @@ -228,13 +226,8 @@ /* Inode operations - iget_locked and new_inode are in interface.c */ extern struct inode *new_inode(struct super_block *sb); -#define i_uid_write(inode, uid) do { } while (0) -#define i_gid_write(inode, gid) do { } while (0) -#define inode_fsuid_set(inode, idmap) do { } while (0) -#define inode_init_owner(idmap, i, dir, mode) do { (i)->i_mode = (mode); } while (0) -#define insert_inode_locked(inode) (0) -#define unlock_new_inode(inode) do { } while (0) -#define clear_nlink(inode) do { } while (0) +/* i_uid_write, i_gid_write, inode_fsuid_set, inode_init_owner are in linux/fs.h */ +/* insert_inode_locked, unlock_new_inode, clear_nlink are in linux/fs.h */ /* IS_DIRSYNC is in linux/fs.h */ /* fscrypt_prepare_new_inode, fscrypt_set_context are in ext4_fscrypt.h */ @@ -335,9 +328,7 @@ BUFFER_FNS(Cached, cached) /* errseq_t is defined in linux/fs.h */ /* time64_t is now in linux/time.h */ -/* IS_NOQUOTA - stub */ -#define IS_NOQUOTA(inode) (0) - +/* IS_NOQUOTA is in linux/fs.h */ /* dentry, name_snapshot are now in linux/dcache.h */ /* VM types - use linux/mm_types.h */ @@ -640,8 +631,7 @@ struct dx_hash_info { #define daxdev_mapping_supported(f, i, d) ({ (void)(f); (void)(i); (void)(d); 1; }) /* Inode time/size operations - inode_newsize_ok, i_blocksize, IS_SYNC are in linux/fs.h */ -#define inode_set_ctime_current(i) ({ (void)(i); (struct timespec64){}; }) -#define inode_set_mtime_to_ts(i, ts) ({ (void)(i); (ts); }) +/* inode_set_ctime_current, inode_set_mtime_to_ts are in linux/fs.h */ /* Case-folding stubs - not supported in U-Boot */ #define sb_no_casefold_compat_fallback(sb) ({ (void)(sb); 1; }) @@ -754,10 +744,8 @@ void mapping_clear_folio_cache(struct address_space *mapping); /* dquot_file_open is in linux/quotaops.h */ -/* Inode I/O list management */ -#define inode_io_list_del(inode) do { } while (0) -#define inode_is_open_for_write(i) (0) -#define inode_is_dirtytime_only(i) (0) +/* inode_io_list_del is in linux/writeback.h */ +/* inode_is_open_for_write, inode_is_dirtytime_only are in linux/fs.h */ /* Folio operations and writeback stubs are in linux/pagemap.h */ #define folio_batch_release(fb) do { } while (0) @@ -805,9 +793,9 @@ static inline struct timespec64 inode_set_ctime_to_ts(struct inode *inode, /* Inode version operations - use linux/iversion.h */ #include -#define inode_set_flags(i, f, m) do { } while (0) +/* inode_set_flags is in linux/fs.h */ -/* Inode credential helpers */ +/* Inode credential helpers - i_uid_read, i_gid_read need struct inode */ static inline unsigned int i_uid_read(const struct inode *inode) { return inode->i_uid.val; @@ -818,10 +806,7 @@ static inline unsigned int i_gid_read(const struct inode *inode) return inode->i_gid.val; } -#define i_uid_needs_update(m, a, i) ({ (void)(m); (void)(a); (void)(i); 0; }) -#define i_gid_needs_update(m, a, i) ({ (void)(m); (void)(a); (void)(i); 0; }) -#define i_uid_update(m, a, i) do { } while (0) -#define i_gid_update(m, a, i) do { } while (0) +/* i_uid_needs_update, i_gid_needs_update, i_uid_update, i_gid_update are in linux/fs.h */ /* Device encoding helpers are now in linux/kdev_t.h */ #include @@ -831,15 +816,9 @@ static inline unsigned int i_gid_read(const struct inode *inode) /* Inode allocation/state operations */ extern struct inode *iget_locked(struct super_block *sb, unsigned long ino); -#define set_nlink(i, n) do { (i)->i_nlink = (n); } while (0) -#define inc_nlink(i) do { (i)->i_nlink++; } while (0) -#define drop_nlink(i) do { (i)->i_nlink--; } while (0) -#define inode_set_cached_link(i, l, len) do { } while (0) -#define init_special_inode(i, m, d) do { } while (0) -#define make_bad_inode(i) do { } while (0) -#define iget_failed(i) do { } while (0) -#define find_inode_by_ino_rcu(sb, ino) ((struct inode *)NULL) -#define mark_inode_dirty(i) do { } while (0) +/* set_nlink, inc_nlink, drop_nlink are in linux/fs.h */ +/* inode_set_cached_link, init_special_inode, make_bad_inode are in linux/fs.h */ +/* iget_failed, find_inode_by_ino_rcu, mark_inode_dirty are in linux/fs.h */ /* Attribute operations */ #define setattr_prepare(m, d, a) ({ (void)(m); (void)(d); (void)(a); 0; }) @@ -1118,11 +1097,8 @@ void fs_put_dax(void *dax, void *holder); /* fscrypt declarations are in ext4_fscrypt.h */ -/* Inode allocation - declaration for stub.c */ -void *alloc_inode_sb(struct super_block *sb, struct kmem_cache *cache, - gfp_t gfp); +/* alloc_inode_sb, inode_generic_drop are in linux/fs.h */ /* inode_set_iversion is in linux/iversion.h */ -int inode_generic_drop(struct inode *inode); /* rwlock_init is a macro in linux/spinlock.h */ @@ -1130,10 +1106,7 @@ int inode_generic_drop(struct inode *inode); #define kmem_cache_create_usercopy(n, sz, al, fl, uo, us, c) \ kmem_cache_create(n, sz, al, fl, c) -/* Inode buffer operations */ -#define invalidate_inode_buffers(i) do { } while (0) -#define clear_inode(i) do { } while (0) - +/* invalidate_inode_buffers, clear_inode are in linux/fs.h */ /* fsverity_cleanup_inode is in linux/fsverity.h */ /* NFS export helpers are now in linux/exportfs.h */ @@ -1458,19 +1431,14 @@ loff_t seq_lseek(struct file *f, loff_t o, int w); /* filemap_release_folio is in linux/pagemap.h */ -/* IS_SWAPFILE - check if inode is a swap file */ -#define IS_SWAPFILE(inode) ({ (void)(inode); 0; }) +/* IS_SWAPFILE is in linux/fs.h */ /* PAGE_MASK - mask for page alignment */ #ifndef PAGE_MASK #define PAGE_MASK (~(PAGE_SIZE - 1)) #endif -/* lock_two_nondirectories - lock two inodes in order */ -#define lock_two_nondirectories(i1, i2) \ - do { (void)(i1); (void)(i2); } while (0) -#define unlock_two_nondirectories(i1, i2) \ - do { (void)(i1); (void)(i2); } while (0) +/* lock_two_nondirectories, unlock_two_nondirectories are in linux/fs.h */ /* * Stubs for resize.c diff --git a/include/linux/fs.h b/include/linux/fs.h index 431dc0c513a..aac88e7c68c 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -314,6 +314,12 @@ enum { /* is_bad_inode - check if inode is marked bad (always false in U-Boot) */ #define is_bad_inode(inode) (0) +/* inode_is_open_for_write - check if inode has open writers (always false) */ +#define inode_is_open_for_write(inode) ({ (void)(inode); 0; }) + +/* inode_is_dirtytime_only - check if inode has only dirty time (always false) */ +#define inode_is_dirtytime_only(inode) ({ (void)(inode); 0; }) + /* Inode state bits for i_state field */ #define I_NEW (1 << 0) #define I_FREEING (1 << 1) @@ -323,6 +329,53 @@ enum { /* Maximum file size for large files */ #define MAX_LFS_FILESIZE ((loff_t)LLONG_MAX) +/* + * Inode operation stubs - U-Boot has simplified inode handling + */ +#define icount_read(inode) (1) +#define i_uid_write(inode, uid) do { } while (0) +#define i_gid_write(inode, gid) do { } while (0) +#define inode_fsuid_set(inode, idmap) do { } while (0) +#define inode_init_owner(idmap, i, dir, mode) \ + do { (i)->i_mode = (mode); } while (0) +#define insert_inode_locked(inode) (0) +#define unlock_new_inode(inode) do { } while (0) +#define clear_nlink(inode) do { } while (0) +#define set_nlink(i, n) do { (i)->i_nlink = (n); } while (0) +#define inc_nlink(i) do { (i)->i_nlink++; } while (0) +#define drop_nlink(i) do { (i)->i_nlink--; } while (0) +#define IS_NOQUOTA(inode) (0) +#define IS_SWAPFILE(inode) ({ (void)(inode); 0; }) +#define inode_set_ctime_current(i) ({ (void)(i); (struct timespec64){}; }) +#define inode_set_mtime_to_ts(i, ts) ({ (void)(i); (ts); }) +#define inode_set_flags(i, f, m) do { } while (0) +#define inode_set_cached_link(i, l, len) do { } while (0) +#define init_special_inode(i, m, d) do { } while (0) +#define make_bad_inode(i) do { } while (0) +#define iget_failed(i) do { } while (0) +#define find_inode_by_ino_rcu(sb, ino) ((struct inode *)NULL) +#define mark_inode_dirty(i) do { } while (0) +#define invalidate_inode_buffers(i) do { } while (0) +#define clear_inode(i) do { } while (0) + +/* Inode credential helpers */ +#define i_uid_needs_update(m, a, i) ({ (void)(m); (void)(a); (void)(i); 0; }) +#define i_gid_needs_update(m, a, i) ({ (void)(m); (void)(a); (void)(i); 0; }) +#define i_uid_update(m, a, i) do { } while (0) +#define i_gid_update(m, a, i) do { } while (0) + +/* lock_two_nondirectories - lock two inodes in order */ +#define lock_two_nondirectories(i1, i2) \ + do { (void)(i1); (void)(i2); } while (0) +#define unlock_two_nondirectories(i1, i2) \ + do { (void)(i1); (void)(i2); } while (0) + +/* Inode allocation - implemented in ext4l/stub.c */ +struct kmem_cache; +void *alloc_inode_sb(struct super_block *sb, struct kmem_cache *cache, + gfp_t gfp); +int inode_generic_drop(struct inode *inode); + /** * get_block_t - block mapping callback type * @inode: inode to map blocks for diff --git a/include/linux/writeback.h b/include/linux/writeback.h index e408e3ddebb..8875b099082 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -46,4 +46,12 @@ static inline xa_mark_t wbc_to_tag(struct writeback_control *wbc) #define try_to_writeback_inodes_sb(sb, reason) \ do { (void)(sb); (void)(reason); } while (0) +/** + * inode_io_list_del() - remove inode from I/O list + * @inode: inode to remove + * + * U-Boot stub - no I/O list management. + */ +#define inode_io_list_del(inode) do { (void)(inode); } while (0) + #endif /* WRITEBACK_H */