[PATCH 30/32] vfs: Drop mapping_metadata_bhs from address space
Jan Kara <[email protected]> Tue, 3 Mar 2026 11:34:19 +0100
| Newsgroups | gmane.linux.kernel.aio.general,gmane.linux.file-systems,gmane.comp.file-systems.ext4,gmane.linux.kernel.mm |
|---|---|
| Message-ID | <[email protected]> |
Nobody uses mapping_metadata_bhs in struct address_space anymore. Just remove it. Signed-off-by: Jan Kara <[email protected]> --- fs/buffer.c | 16 ++++++++++------ fs/inode.c | 2 -- include/linux/fs.h | 1 - 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 096a8d9e3280..02176e0acfe1 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -501,9 +501,13 @@ EXPORT_SYMBOL(mmb_init); static struct mapping_metadata_bhs *inode_get_metadata_bhs(struct inode *inode) { + /* + * We can get called for various half-initialized or bad inodes so + * verify .get_metadata_bhs callback exists. + */ if (inode->i_op->get_metadata_bhs) return inode->i_op->get_metadata_bhs(inode); - return &inode->i_mapping->i_metadata_bhs; + return NULL; } static void __remove_assoc_queue(struct mapping_metadata_bhs *mmb, @@ -544,7 +548,7 @@ static void remove_assoc_queue(struct buffer_head *bh) bool mmb_has_buffers(struct mapping_metadata_bhs *mmb) { - return !list_empty(&mmb->list); + return mmb && !list_empty(&mmb->list); } EXPORT_SYMBOL_GPL(mmb_has_buffers); @@ -552,10 +556,10 @@ EXPORT_SYMBOL_GPL(mmb_has_buffers); * sync_mapping_buffers - write out & wait upon a mapping's "associated" buffers * @mapping: the mapping which wants those buffers written * - * Starts I/O against the buffers at mapping->i_metadata_bhs and waits upon - * that I/O. Basically, this is a convenience function for fsync(). @mapping - * is a file or directory which needs those buffers to be written for a - * successful fsync(). + * Starts I/O against the buffers tracked in mapping_metadata_bhs for the + * mapping and waits upon that I/O. Basically, this is a convenience function + * for fsync(). @mapping is a file or directory which needs those buffers to + * be written for a successful fsync(). * * We have conflicting pressures: we want to make sure that all * initially dirty buffers get waited on, but that any subsequently diff --git a/fs/inode.c b/fs/inode.c index 393f586d050a..d5774e627a9c 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -483,8 +483,6 @@ static void __address_space_init_once(struct address_space *mapping) init_rwsem(&mapping->i_mmap_rwsem); INIT_LIST_HEAD(&mapping->i_private_list); spin_lock_init(&mapping->i_private_lock); - spin_lock_init(&mapping->i_metadata_bhs.lock); - INIT_LIST_HEAD(&mapping->i_metadata_bhs.list); mapping->i_mmap = RB_ROOT_CACHED; } diff --git a/include/linux/fs.h b/include/linux/fs.h index b4d9be1fefa4..1611d8ce4b66 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -490,7 +490,6 @@ struct address_space { errseq_t wb_err; spinlock_t i_private_lock; struct list_head i_private_list; - struct mapping_metadata_bhs i_metadata_bhs; struct rw_semaphore i_mmap_rwsem; } __attribute__((aligned(sizeof(long)))) __randomize_layout; /* -- 2.51.0 -- To unsubscribe, send a message with 'unsubscribe linux-aio' in the body to [email protected]. For more info on Linux AIO, see: http://www.kvack.org/aio/ Don't email: <a href=mailto:"[email protected]">[email protected]</a>