f2fs: add fsync_mode=nobarrier for non-atomic files
Subsystems (2)
Jaegeuk Kim
maintainerRFC PATCH 1/1 f2fs: add fsync_mode=nobarrier for non-atomic files
For non-atomic files, this patch adds an option to give nobarrier which doesn't issue flush commands to the device.
Signed-off-by Jaegeuk Kim <[email protected]>
--- Documentation/filesystems/f2fs.txt | 16 +++++++++------- fs/f2fs/f2fs.h | 1 + fs/f2fs/file.c | 2 +- fs/f2fs/super.c | 4 ++++ 4 files changed, 15 insertions(+), 8 deletions(-)
Documentation/filesystems/f2fs.txt +9 -7
@@ -182,13 +182,15 @@ whint_mode=%s Control which write hints are passed down to block passes down hints with its policy. alloc_mode=%s Adjust block allocation policy, which supports "reuse" and "default". -fsync_mode=%s Control the policy of fsync. Currently supports "posix" - and "strict". In "posix" mode, which is default, fsync - will follow POSIX semantics and does a light operation - to improve the filesystem performance. In "strict" mode, - fsync will be heavy and behaves in line with xfs, ext4 - and btrfs, where xfstest generic/342 will pass, but the - performance will regress. +fsync_mode=%s Control the policy of fsync. Currently supports "posix", + "strict", and "nobarrier". In "posix" mode, which is + default, fsync will follow POSIX semantics and does a + light operation to improve the filesystem performance. + In "strict" mode, fsync will be heavy and behaves in line + with xfs, ext4 and btrfs, where xfstest generic/342 will + pass, but the performance will regress. "nobarrier" is + based on "posix", but doesn't issue flush command for + non-atomic files likewise "nobarrier" mount option. test_dummy_encryption Enable dummy encryption, which provides a fake fscrypt context. The fake fscrypt context is used by xfstests.
fs/f2fs/f2fs.h +1 -0
@@ -1093,6 +1093,7 @@ enum {enum fsync_mode {FSYNC_MODE_POSIX ,/* fsync follows posix semantics */ FSYNC_MODE_STRICT ,/* fsync behaves in line with ext4 */ +FSYNC_MODE_NOBARRIER ,/* fsync behaves nobarrier based on posix */ };#ifdef CONFIG_F2FS_FS_ENCRYPTION
fs/f2fs/file.c +1 -1
@@ -306,7 +306,7 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,remove_ino_entry (sbi, ino,APPEND_INO );clear_inode_flag (inode,FI_APPEND_WRITE ); flush_out: -if (!atomic) +if (!atomic &&F2FS_OPTION (sbi).fsync_mode !=FSYNC_MODE_NOBARRIER ) ret =f2fs_issue_flush (sbi, inode->i_ino);if (!ret) {remove_ino_entry (sbi, ino,UPDATE_INO );
fs/f2fs/super.c +4 -0
@@ -740,6 +740,10 @@ static int parse_options(struct super_block *sb, char *options) }else if (strlen (name) ==6 && !strncmp (name,"strict" ,6 )) {F2FS_OPTION (sbi).fsync_mode =FSYNC_MODE_STRICT ; + }else if (strlen (name) ==9 && + !strncmp (name,"nobarrier" ,9 )) { +F2FS_OPTION (sbi).fsync_mode = +FSYNC_MODE_NOBARRIER ; }else {kfree (name);return -EINVAL ;
Signature · 1 line
2.17.0.441.gb46fe60e1d-goog
Quoted 4 lines · Jaegeuk Kim
For non-atomic files, this patch adds an option to give nobarrier which doesn't issue flush commands to the device.
Signed-off-by Jaegeuk Kim <[email protected]>
Reviewed-by Chao Yu <[email protected]>
Thanks,