Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a38cf15 authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

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.

Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 8f6a2e7a
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -179,13 +179,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.

+1 −0
Original line number Diff line number Diff line
@@ -1080,6 +1080,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
+1 −1
Original line number Diff line number Diff line
@@ -308,7 +308,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);
+4 −0
Original line number Diff line number Diff line
@@ -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;