]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs: Stop using i_private_data for metadata bh tracking
authorJan Kara <jack@suse.cz>
Thu, 26 Mar 2026 09:54:17 +0000 (10:54 +0100)
committerChristian Brauner <brauner@kernel.org>
Thu, 26 Mar 2026 14:03:30 +0000 (15:03 +0100)
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 <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20260326095354.16340-65-jack@suse.cz
Tested-by: syzbot@syzkaller.appspotmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/buffer.c

index bd48644e1bf8d6f5d79ec2495c10bf34895a8e22..c85ccfb1a4ec784782b8408caf954ab875341d83 100644 (file)
@@ -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))