提交 9b5f136f 编写于 作者: J Jaegeuk Kim

f2fs: change the ipu_policy option to enable combinations

This patch changes the ipu_policy setting to use any combination of orthogonal policies.
Signed-off-by: NChangman Lee <cm224.lee@samsung.com>
Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
上级 210f41bc
...@@ -192,9 +192,9 @@ Files in /sys/fs/f2fs/<devname> ...@@ -192,9 +192,9 @@ Files in /sys/fs/f2fs/<devname>
ipu_policy This parameter controls the policy of in-place ipu_policy This parameter controls the policy of in-place
updates in f2fs. There are five policies: updates in f2fs. There are five policies:
0: F2FS_IPU_FORCE, 1: F2FS_IPU_SSR, 0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
2: F2FS_IPU_UTIL, 3: F2FS_IPU_SSR_UTIL, 0x04: F2FS_IPU_UTIL, 0x08: F2FS_IPU_SSR_UTIL,
4: F2FS_IPU_FSYNC, 5: F2FS_IPU_DISABLE. 0x10: F2FS_IPU_FSYNC.
min_ipu_util This parameter controls the threshold to trigger min_ipu_util This parameter controls the threshold to trigger
in-place-updates. The number indicates percentage in-place-updates. The number indicates percentage
......
...@@ -1928,7 +1928,7 @@ int build_segment_manager(struct f2fs_sb_info *sbi) ...@@ -1928,7 +1928,7 @@ int build_segment_manager(struct f2fs_sb_info *sbi)
sm_info->ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr); sm_info->ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr);
sm_info->rec_prefree_segments = sm_info->main_segments * sm_info->rec_prefree_segments = sm_info->main_segments *
DEF_RECLAIM_PREFREE_SEGMENTS / 100; DEF_RECLAIM_PREFREE_SEGMENTS / 100;
sm_info->ipu_policy = F2FS_IPU_FSYNC; sm_info->ipu_policy = 1 << F2FS_IPU_FSYNC;
sm_info->min_ipu_util = DEF_MIN_IPU_UTIL; sm_info->min_ipu_util = DEF_MIN_IPU_UTIL;
sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS; sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS;
......
...@@ -487,40 +487,33 @@ enum { ...@@ -487,40 +487,33 @@ enum {
F2FS_IPU_UTIL, F2FS_IPU_UTIL,
F2FS_IPU_SSR_UTIL, F2FS_IPU_SSR_UTIL,
F2FS_IPU_FSYNC, F2FS_IPU_FSYNC,
F2FS_IPU_DISABLE,
}; };
static inline bool need_inplace_update(struct inode *inode) static inline bool need_inplace_update(struct inode *inode)
{ {
struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
unsigned int policy = SM_I(sbi)->ipu_policy;
/* IPU can be done only for the user data */ /* IPU can be done only for the user data */
if (S_ISDIR(inode->i_mode)) if (S_ISDIR(inode->i_mode))
return false; return false;
switch (SM_I(sbi)->ipu_policy) { if (policy & (0x1 << F2FS_IPU_FORCE))
case F2FS_IPU_FORCE:
return true; return true;
case F2FS_IPU_SSR: if (policy & (0x1 << F2FS_IPU_SSR) && need_SSR(sbi))
if (need_SSR(sbi)) return true;
return true; if (policy & (0x1 << F2FS_IPU_UTIL) &&
break; utilization(sbi) > SM_I(sbi)->min_ipu_util)
case F2FS_IPU_UTIL: return true;
if (utilization(sbi) > SM_I(sbi)->min_ipu_util) if (policy & (0x1 << F2FS_IPU_SSR_UTIL) && need_SSR(sbi) &&
return true; utilization(sbi) > SM_I(sbi)->min_ipu_util)
break; return true;
case F2FS_IPU_SSR_UTIL:
if (need_SSR(sbi) && utilization(sbi) > SM_I(sbi)->min_ipu_util) /* this is only set during fdatasync */
return true; if (policy & (0x1 << F2FS_IPU_FSYNC) &&
break; is_inode_flag_set(F2FS_I(inode), FI_NEED_IPU))
case F2FS_IPU_FSYNC: return true;
/* this is only set during fdatasync */
if (is_inode_flag_set(F2FS_I(inode), FI_NEED_IPU))
return true;
break;
case F2FS_IPU_DISABLE:
break;
}
return false; return false;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册