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.

udf: 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-80-jack@suse.cz
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Jan Kara and committed by
Christian Brauner
d0874a58 43995984

+25 -14
+1 -1
fs/udf/dir.c
··· 157 157 .read = generic_read_dir, 158 158 .iterate_shared = udf_readdir, 159 159 .unlocked_ioctl = udf_ioctl, 160 - .fsync = generic_buffers_fsync, 160 + .fsync = udf_fsync, 161 161 .setlease = generic_setlease, 162 162 };
+3 -2
fs/udf/directory.c
··· 430 430 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { 431 431 mark_inode_dirty(iter->dir); 432 432 } else { 433 - mark_buffer_dirty_inode(iter->bh[0], iter->dir); 433 + mmb_mark_buffer_dirty(iter->bh[0], &iinfo->i_metadata_bhs); 434 434 if (iter->bh[1]) 435 - mark_buffer_dirty_inode(iter->bh[1], iter->dir); 435 + mmb_mark_buffer_dirty(iter->bh[1], 436 + &iinfo->i_metadata_bhs); 436 437 } 437 438 inode_inc_iversion(iter->dir); 438 439 }
+8 -1
fs/udf/file.c
··· 198 198 return 0; 199 199 } 200 200 201 + int udf_fsync(struct file *file, loff_t start, loff_t end, int datasync) 202 + { 203 + return mmb_fsync(file, 204 + &UDF_I(file->f_mapping->host)->i_metadata_bhs, 205 + start, end, datasync); 206 + } 207 + 201 208 const struct file_operations udf_file_operations = { 202 209 .read_iter = generic_file_read_iter, 203 210 .unlocked_ioctl = udf_ioctl, ··· 212 205 .mmap = udf_file_mmap, 213 206 .write_iter = udf_file_write_iter, 214 207 .release = udf_release_file, 215 - .fsync = generic_buffers_fsync, 208 + .fsync = udf_fsync, 216 209 .splice_read = filemap_splice_read, 217 210 .splice_write = iter_file_splice_write, 218 211 .llseek = generic_file_llseek,
+8 -8
fs/udf/inode.c
··· 155 155 } 156 156 truncate_inode_pages_final(&inode->i_data); 157 157 if (!want_delete) 158 - sync_mapping_buffers(&inode->i_data); 159 - invalidate_inode_buffers(inode); 158 + mmb_sync(&iinfo->i_metadata_bhs); 159 + mmb_invalidate(&iinfo->i_metadata_bhs); 160 160 clear_inode(inode); 161 161 kfree(iinfo->i_data); 162 162 iinfo->i_data = NULL; ··· 1263 1263 memset(bh->b_data, 0x00, inode->i_sb->s_blocksize); 1264 1264 set_buffer_uptodate(bh); 1265 1265 unlock_buffer(bh); 1266 - mark_buffer_dirty_inode(bh, inode); 1266 + mmb_mark_buffer_dirty(bh, &UDF_I(inode)->i_metadata_bhs); 1267 1267 return bh; 1268 1268 } 1269 1269 ··· 2011 2011 memset(bh->b_data, 0x00, sb->s_blocksize); 2012 2012 set_buffer_uptodate(bh); 2013 2013 unlock_buffer(bh); 2014 - mark_buffer_dirty_inode(bh, inode); 2014 + mmb_mark_buffer_dirty(bh, &UDF_I(inode)->i_metadata_bhs); 2015 2015 2016 2016 aed = (struct allocExtDesc *)(bh->b_data); 2017 2017 if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT)) { ··· 2106 2106 else 2107 2107 udf_update_tag(epos->bh->b_data, 2108 2108 sizeof(struct allocExtDesc)); 2109 - mark_buffer_dirty_inode(epos->bh, inode); 2109 + mmb_mark_buffer_dirty(epos->bh, &iinfo->i_metadata_bhs); 2110 2110 } 2111 2111 2112 2112 return 0; ··· 2190 2190 le32_to_cpu(aed->lengthAllocDescs) + 2191 2191 sizeof(struct allocExtDesc)); 2192 2192 } 2193 - mark_buffer_dirty_inode(epos->bh, inode); 2193 + mmb_mark_buffer_dirty(epos->bh, &iinfo->i_metadata_bhs); 2194 2194 } else { 2195 2195 mark_inode_dirty(inode); 2196 2196 } ··· 2398 2398 else 2399 2399 udf_update_tag(oepos.bh->b_data, 2400 2400 sizeof(struct allocExtDesc)); 2401 - mark_buffer_dirty_inode(oepos.bh, inode); 2401 + mmb_mark_buffer_dirty(oepos.bh, &iinfo->i_metadata_bhs); 2402 2402 } 2403 2403 } else { 2404 2404 udf_write_aext(inode, &oepos, &eloc, elen, 1); ··· 2415 2415 else 2416 2416 udf_update_tag(oepos.bh->b_data, 2417 2417 sizeof(struct allocExtDesc)); 2418 - mark_buffer_dirty_inode(oepos.bh, inode); 2418 + mmb_mark_buffer_dirty(oepos.bh, &iinfo->i_metadata_bhs); 2419 2419 } 2420 2420 } 2421 2421
+1 -1
fs/udf/namei.c
··· 638 638 memset(epos.bh->b_data, 0x00, bsize); 639 639 set_buffer_uptodate(epos.bh); 640 640 unlock_buffer(epos.bh); 641 - mark_buffer_dirty_inode(epos.bh, inode); 641 + mmb_mark_buffer_dirty(epos.bh, &iinfo->i_metadata_bhs); 642 642 ea = epos.bh->b_data + udf_ext0_offset(inode); 643 643 } else 644 644 ea = iinfo->i_data + iinfo->i_lenEAttr;
+1
fs/udf/super.c
··· 166 166 ei->cached_extent.lstart = -1; 167 167 spin_lock_init(&ei->i_extent_cache_lock); 168 168 inode_set_iversion(&ei->vfs_inode, 1); 169 + mmb_init(&ei->i_metadata_bhs, &ei->vfs_inode.i_data); 169 170 170 171 return &ei->vfs_inode; 171 172 }
+1 -1
fs/udf/truncate.c
··· 186 186 len += lenalloc; 187 187 188 188 udf_update_tag(epos->bh->b_data, len); 189 - mark_buffer_dirty_inode(epos->bh, inode); 189 + mmb_mark_buffer_dirty(epos->bh, &UDF_I(inode)->i_metadata_bhs); 190 190 } 191 191 192 192 /*
+1
fs/udf/udf_i.h
··· 50 50 struct kernel_lb_addr i_locStreamdir; 51 51 __u64 i_lenStreams; 52 52 struct rw_semaphore i_data_sem; 53 + struct mapping_metadata_bhs i_metadata_bhs; 53 54 struct udf_ext_cache cached_extent; 54 55 /* Spinlock for protecting extent cache */ 55 56 spinlock_t i_extent_cache_lock;
+1
fs/udf/udfdecl.h
··· 137 137 138 138 /* file.c */ 139 139 extern long udf_ioctl(struct file *, unsigned int, unsigned long); 140 + int udf_fsync(struct file *file, loff_t start, loff_t end, int datasync); 140 141 141 142 /* inode.c */ 142 143 extern struct inode *__udf_iget(struct super_block *, struct kernel_lb_addr *,