mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ext2: only flush DIRSYNC directories on every change
Every change of an ext2 directory is written to disk before the system call
returns, whether the directory is DIRSYNC or not: its pages with
filemap_write_and_wait() and its inode with sync_inode_metadata().
Writes which reach the device for 2000 files, and 200 directories, in a
directory without DIRSYNC, with the flusher turned off:
create rename unlink mkdir
before 4000 8000 4000 800
after 0 0 0 0
In a directory with chattr +D the numbers are those of "before", before and
after.
commit bc943f4872 ("ext2: Don't flush page immediately for DIRSYNC
directories") moved the flush from ext2_commit_chunk() to the new
ext2_handle_dirsync(). The IS_DIRSYNC() check which was around it didn't
move along.
Fix by putting the check into ext2_handle_dirsync().
Fixes: bc943f4872 ("ext2: Don't flush page immediately for DIRSYNC directories")
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Link: https://patch.msgid.link/20261027-b4-ext2-dirsync-v1-1-3dcd012d518d@toxicpanda.com
Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
cbf04dde8b
commit
3f57fc2c49
|
|
@ -442,6 +442,9 @@ static int ext2_handle_dirsync(struct inode *dir)
|
|||
{
|
||||
int err;
|
||||
|
||||
if (!IS_DIRSYNC(dir))
|
||||
return 0;
|
||||
|
||||
err = filemap_write_and_wait(dir->i_mapping);
|
||||
if (!err)
|
||||
err = sync_inode_metadata(dir, 1);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user