mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
fs: Remove inode lock from __generic_file_fsync()
Inode lock in __generic_file_fsync() protects sync_mapping_buffers() and sync_inode_metadata() calls. Neither sync_mapping_buffers() nor sync_inode_metadata() themselves need the protection by inode_lock and both metadata buffer head writeback and inode writeback can happen without inode lock (either in case of background writeback or sync(2) calls). The only protection inode_lock can possibly provide is that write(2) or other inode modifying calls cannot happen in the middle of bh+inode writeout and thus result in writeout of inconsistent metadata. However if writes and fsyncs race, background writeback can submit inconsistent metadata just after fsync completed even with inode_lock protecting fsync so this seems moot as well. So let's remove the apparently pointless inode_lock protection. Signed-off-by: Jan Kara <jack@suse.cz> Link: https://patch.msgid.link/20260326095354.16340-50-jack@suse.cz Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
2cbfeb4c8a
commit
ba31a330b4
|
|
@ -1561,7 +1561,6 @@ int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
inode_lock(inode);
|
||||
ret = sync_mapping_buffers(inode->i_mapping);
|
||||
if (!(inode_state_read_once(inode) & I_DIRTY_ALL))
|
||||
goto out;
|
||||
|
|
@ -1573,7 +1572,6 @@ int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
|
|||
ret = err;
|
||||
|
||||
out:
|
||||
inode_unlock(inode);
|
||||
/* check and advance again to catch errors after syncing out buffers */
|
||||
err = file_check_and_advance_wb_err(file);
|
||||
if (ret == 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user