inode_has_buffers() is also used internally and it is trivial so it's pointless to grab mapping_metadata_bhs for each invocation. Just let that function take mapping_metadata_bhs struct instead and rename the function to mmb_has_buffers(). Signed-off-by: Jan Kara --- fs/buffer.c | 14 +++++++------- fs/ext4/inode.c | 2 +- include/linux/buffer_head.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index d7a1d72302da..096a8d9e3280 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -468,7 +468,7 @@ EXPORT_SYMBOL(mark_buffer_async_write); * written back and waited upon before fsync() returns. * * The functions mark_buffer_dirty_inode(), fsync_inode_buffers(), - * inode_has_buffers() and invalidate_inode_buffers() are provided for the + * mmb_has_buffers() and invalidate_inode_buffers() are provided for the * management of a list of dependent buffers in mapping_metadata_bhs struct. * * The locking is a little subtle: The list of buffer heads is protected by @@ -542,11 +542,11 @@ static void remove_assoc_queue(struct buffer_head *bh) } } -int inode_has_buffers(struct inode *inode) +bool mmb_has_buffers(struct mapping_metadata_bhs *mmb) { - return !list_empty(&inode->i_data.i_metadata_bhs.list); + return !list_empty(&mmb->list); } -EXPORT_SYMBOL_GPL(inode_has_buffers); +EXPORT_SYMBOL_GPL(mmb_has_buffers); /** * sync_mapping_buffers - write out & wait upon a mapping's "associated" buffers @@ -578,7 +578,7 @@ int sync_mapping_buffers(struct address_space *mapping) struct blk_plug plug; LIST_HEAD(tmp); - if (list_empty(&mmb->list)) + if (!mmb_has_buffers(mmb)) return 0; blk_start_plug(&plug); @@ -820,9 +820,9 @@ EXPORT_SYMBOL(block_dirty_folio); */ void invalidate_inode_buffers(struct inode *inode) { - if (inode_has_buffers(inode)) { - struct mapping_metadata_bhs *mmb = inode_get_metadata_bhs(inode); + struct mapping_metadata_bhs *mmb = inode_get_metadata_bhs(inode); + if (mmb_has_buffers(mmb)) { spin_lock(&mmb->lock); while (!list_empty(&mmb->list)) __remove_assoc_queue(mmb, BH_ENTRY(mmb->list.next)); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 6f892abef003..011cb2eb16a2 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3436,7 +3436,7 @@ static bool ext4_inode_datasync_dirty(struct inode *inode) } /* Any metadata buffers to write? */ - if (inode_has_buffers(inode)) + if (mmb_has_buffers(&inode->i_mapping->i_metadata_bhs)) return true; return inode_state_read_once(inode) & I_DIRTY_DATASYNC; } diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 623ee66d41a8..ebbd73c45e63 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -516,7 +516,7 @@ bool block_dirty_folio(struct address_space *mapping, struct folio *folio); void buffer_init(void); bool try_to_free_buffers(struct folio *folio); void mmb_init(struct mapping_metadata_bhs *mmb); -int inode_has_buffers(struct inode *inode); +bool mmb_has_buffers(struct mapping_metadata_bhs *mmb); void invalidate_inode_buffers(struct inode *inode); int sync_mapping_buffers(struct address_space *mapping); void invalidate_bh_lrus(void); -- 2.51.0