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

Commit ea1aa12c authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: enable in-place-update for fdatasync



This patch enforces in-place-updates only when fdatasync is requested.
If we adopt this in-place-updates for the fdatasync, we can skip to write the
recovery information.

Reviewed-by: default avatarChao Yu <chao2.yu@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 6d99ba41
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -998,6 +998,7 @@ enum {
	FI_INLINE_DATA,		/* used for inline data*/
	FI_APPEND_WRITE,	/* inode has appended data */
	FI_UPDATE_WRITE,	/* inode has in-place-update data */
	FI_NEED_IPU,		/* used fo ipu for fdatasync */
};

static inline void set_inode_flag(struct f2fs_inode_info *fi, int flag)
+7 −0
Original line number Diff line number Diff line
@@ -127,7 +127,14 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
		return 0;

	trace_f2fs_sync_file_enter(inode);

	/* if fdatasync is triggered, let's do in-place-update */
	if (datasync)
		set_inode_flag(fi, FI_NEED_IPU);

	ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
	if (datasync)
		clear_inode_flag(fi, FI_NEED_IPU);
	if (ret) {
		trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
		return ret;
+4 −0
Original line number Diff line number Diff line
@@ -486,6 +486,10 @@ static inline bool need_inplace_update(struct inode *inode)
	if (S_ISDIR(inode->i_mode))
		return false;

	/* this is only set during fdatasync */
	if (is_inode_flag_set(F2FS_I(inode), FI_NEED_IPU))
		return true;

	switch (SM_I(sbi)->ipu_policy) {
	case F2FS_IPU_FORCE:
		return true;