From: Jan Kara Date: Thu, 26 Mar 2026 09:54:17 +0000 (+0100) Subject: fs: Stop using i_private_data for metadata bh tracking X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0f46a9e2743cb3ac813553dcef451d57d9c9dbab;p=thirdparty%2Fkernel%2Flinux.git fs: Stop using i_private_data for metadata bh tracking All filesystem using generic metadata bh tracking are using bdev mapping as a backing for these bhs. Stop using i_private_data for it and get to bdev mapping directly. Reviewed-by: Christoph Hellwig Signed-off-by: Jan Kara Link: https://patch.msgid.link/20260326095354.16340-65-jack@suse.cz Tested-by: syzbot@syzkaller.appspotmail.com Signed-off-by: Christian Brauner --- diff --git a/fs/buffer.c b/fs/buffer.c index bd48644e1bf8d..c85ccfb1a4ec7 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -574,9 +574,10 @@ repeat: */ int sync_mapping_buffers(struct address_space *mapping) { - struct address_space *buffer_mapping = mapping->i_private_data; + struct address_space *buffer_mapping = + mapping->host->i_sb->s_bdev->bd_mapping; - if (buffer_mapping == NULL || list_empty(&mapping->i_private_list)) + if (list_empty(&mapping->i_private_list)) return 0; return fsync_buffers_list(&buffer_mapping->i_private_lock, @@ -679,11 +680,6 @@ void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode) struct address_space *buffer_mapping = bh->b_folio->mapping; mark_buffer_dirty(bh); - if (!mapping->i_private_data) { - mapping->i_private_data = buffer_mapping; - } else { - BUG_ON(mapping->i_private_data != buffer_mapping); - } if (!bh->b_assoc_map) { spin_lock(&buffer_mapping->i_private_lock); list_move_tail(&bh->b_assoc_buffers, @@ -868,7 +864,8 @@ void invalidate_inode_buffers(struct inode *inode) if (inode_has_buffers(inode)) { struct address_space *mapping = &inode->i_data; struct list_head *list = &mapping->i_private_list; - struct address_space *buffer_mapping = mapping->i_private_data; + struct address_space *buffer_mapping = + mapping->host->i_sb->s_bdev->bd_mapping; spin_lock(&buffer_mapping->i_private_lock); while (!list_empty(list))