Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ext2: Track metadata bhs in fs-private inode part

Track metadata bhs for an inode in fs-private part of the inode.

Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20260326095354.16340-76-jack@suse.cz
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Jan Kara and committed by
Christian Brauner
b0439bbc a8c8122a

+15 -9
+1
fs/ext2/ext2.h
··· 676 676 #ifdef CONFIG_QUOTA 677 677 struct dquot __rcu *i_dquot[MAXQUOTAS]; 678 678 #endif 679 + struct mapping_metadata_bhs i_metadata_bhs; 679 680 }; 680 681 681 682 /*
+4 -2
fs/ext2/file.c
··· 156 156 int ext2_fsync(struct file *file, loff_t start, loff_t end, int datasync) 157 157 { 158 158 int ret; 159 - struct super_block *sb = file->f_mapping->host->i_sb; 159 + struct inode *inode = file->f_mapping->host; 160 + struct super_block *sb = inode->i_sb; 160 161 161 - ret = generic_buffers_fsync(file, start, end, datasync); 162 + ret = mmb_fsync(file, &EXT2_I(inode)->i_metadata_bhs, 163 + start, end, datasync); 162 164 if (ret == -EIO) 163 165 /* We don't really know where the IO error happened... */ 164 166 ext2_error(sb, __func__,
+9 -7
fs/ext2/inode.c
··· 95 95 ext2_truncate_blocks(inode, 0); 96 96 ext2_xattr_delete_inode(inode); 97 97 } else { 98 - sync_mapping_buffers(&inode->i_data); 98 + mmb_sync(&EXT2_I(inode)->i_metadata_bhs); 99 99 } 100 - invalidate_inode_buffers(inode); 100 + mmb_invalidate(&EXT2_I(inode)->i_metadata_bhs); 101 101 clear_inode(inode); 102 102 103 103 ext2_discard_reservation(inode); ··· 527 527 } 528 528 set_buffer_uptodate(bh); 529 529 unlock_buffer(bh); 530 - mark_buffer_dirty_inode(bh, inode); 530 + mmb_mark_buffer_dirty(bh, &EXT2_I(inode)->i_metadata_bhs); 531 531 /* We used to sync bh here if IS_SYNC(inode). 532 532 * But we now rely upon generic_write_sync() 533 533 * and b_inode_buffers. But not for directories. ··· 598 598 599 599 /* had we spliced it onto indirect block? */ 600 600 if (where->bh) 601 - mark_buffer_dirty_inode(where->bh, inode); 601 + mmb_mark_buffer_dirty(where->bh, &EXT2_I(inode)->i_metadata_bhs); 602 602 603 603 inode_set_ctime_current(inode); 604 604 mark_inode_dirty(inode); ··· 1211 1211 if (partial == chain) 1212 1212 mark_inode_dirty(inode); 1213 1213 else 1214 - mark_buffer_dirty_inode(partial->bh, inode); 1214 + mmb_mark_buffer_dirty(partial->bh, 1215 + &EXT2_I(inode)->i_metadata_bhs); 1215 1216 ext2_free_branches(inode, &nr, &nr+1, (chain+n-1) - partial); 1216 1217 } 1217 1218 /* Clear the ends of indirect blocks on the shared branch */ ··· 1221 1220 partial->p + 1, 1222 1221 (__le32*)partial->bh->b_data+addr_per_block, 1223 1222 (chain+n-1) - partial); 1224 - mark_buffer_dirty_inode(partial->bh, inode); 1223 + mmb_mark_buffer_dirty(partial->bh, 1224 + &EXT2_I(inode)->i_metadata_bhs); 1225 1225 brelse (partial->bh); 1226 1226 partial--; 1227 1227 } ··· 1305 1303 1306 1304 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); 1307 1305 if (inode_needs_sync(inode)) { 1308 - sync_mapping_buffers(inode->i_mapping); 1306 + mmb_sync(&EXT2_I(inode)->i_metadata_bhs); 1309 1307 sync_inode_metadata(inode, 1); 1310 1308 } else { 1311 1309 mark_inode_dirty(inode);
+1
fs/ext2/super.c
··· 215 215 #ifdef CONFIG_QUOTA 216 216 memset(&ei->i_dquot, 0, sizeof(ei->i_dquot)); 217 217 #endif 218 + mmb_init(&ei->i_metadata_bhs, &ei->vfs_inode.i_data); 218 219 219 220 return &ei->vfs_inode; 220 221 }