For LFS mode, it should update outplace and no need inplace update.
When using LFS mode for small-volume devices, IPU will not be used,
and the OPU writing method is actually used, but F2FS_IPU_FORCE can
be read from the ipu_policy node, which is different from the actual
situation. And after remount, ipu should be disabled when convert to
lfs mode, let's fix it.

commit bdc48fa11e46 ("checkpatch/coding-style: deprecate 80-column
warning") increased the limit to 100 columns. BTW modify some unnecessary
newlines.

Fixes: 84b89e5d943d ("f2fs: add auto tuning for small devices")
Signed-off-by: Yangtao Li <frank...@vivo.com>
---
 fs/f2fs/segment.h |  2 ++
 fs/f2fs/super.c   | 20 +++++++++-----------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index ad6a9c19f46a..0b0eb8f03cba 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -670,6 +670,8 @@ static inline int utilization(struct f2fs_sb_info *sbi)
 
 #define SMALL_VOLUME_SEGMENTS  (16 * 512)      /* 16GB */
 
+#define F2FS_IPU_DISABLE       0
+
 enum {
        F2FS_IPU_FORCE,
        F2FS_IPU_SSR,
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index d8a65645ee48..ebc76683f05d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -2272,6 +2272,9 @@ static int f2fs_remount(struct super_block *sb, int 
*flags, char *data)
        if (err)
                goto restore_opts;
 
+       if (F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS)
+               SM_I(sbi)->ipu_policy = F2FS_IPU_DISABLE;
+
        /*
         * Previous and new state of filesystem is RO,
         * so skip checking GC and FLUSH_MERGE conditions.
@@ -4080,10 +4083,9 @@ static void f2fs_tuning_parameters(struct f2fs_sb_info 
*sbi)
        /* adjust parameters according to the volume size */
        if (MAIN_SEGS(sbi) <= SMALL_VOLUME_SEGMENTS) {
                if (f2fs_block_unit_discard(sbi))
-                       SM_I(sbi)->dcc_info->discard_granularity =
-                                               MIN_DISCARD_GRANULARITY;
-               SM_I(sbi)->ipu_policy = BIT(F2FS_IPU_FORCE) |
-                                       BIT(F2FS_IPU_HONOR_OPU_WRITE);
+                       SM_I(sbi)->dcc_info->discard_granularity = 
MIN_DISCARD_GRANULARITY;
+               if (F2FS_OPTION(sbi).fs_mode != FS_MODE_LFS)
+                       SM_I(sbi)->ipu_policy = BIT(F2FS_IPU_FORCE) | 
BIT(F2FS_IPU_HONOR_OPU_WRITE);
        }
 
        sbi->readdir_ra = true;
@@ -4310,9 +4312,7 @@ static int f2fs_fill_super(struct super_block *sb, void 
*data, int silent)
                        test_opt(sbi, MERGE_CHECKPOINT)) {
                err = f2fs_start_ckpt_thread(sbi);
                if (err) {
-                       f2fs_err(sbi,
-                           "Failed to start F2FS issue_checkpoint_thread (%d)",
-                           err);
+                       f2fs_err(sbi, "Failed to start F2FS 
issue_checkpoint_thread (%d)", err);
                        goto stop_ckpt_thread;
                }
        }
@@ -4320,14 +4320,12 @@ static int f2fs_fill_super(struct super_block *sb, void 
*data, int silent)
        /* setup f2fs internal modules */
        err = f2fs_build_segment_manager(sbi);
        if (err) {
-               f2fs_err(sbi, "Failed to initialize F2FS segment manager (%d)",
-                        err);
+               f2fs_err(sbi, "Failed to initialize F2FS segment manager (%d)", 
err);
                goto free_sm;
        }
        err = f2fs_build_node_manager(sbi);
        if (err) {
-               f2fs_err(sbi, "Failed to initialize F2FS node manager (%d)",
-                        err);
+               f2fs_err(sbi, "Failed to initialize F2FS node manager (%d)", 
err);
                goto free_nm;
        }
 
-- 
2.25.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to