f2fs: add a way to turn off ipu bio cache
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 7 Jan 2020 00:43:09 +0000 (16:43 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Sat, 18 Jan 2020 00:48:43 +0000 (16:48 -0800)
Setting 0x40 in /sys/fs/f2fs/dev/ipu_policy gives a way to turn off
bio cache, which is useufl to check whether block layer using hardware
encryption engine merges IOs correctly.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Documentation/filesystems/f2fs.txt
fs/f2fs/segment.c
fs/f2fs/segment.h

index 41b5aa9..b80a7b6 100644 (file)
@@ -331,10 +331,11 @@ Files in /sys/fs/f2fs/<devname>
                               conducts. 32 sections is set by default.
 
  ipu_policy                   This parameter controls the policy of in-place
-                              updates in f2fs. There are five policies:
+                              updates in f2fs. User can set:
                                0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
                                0x04: F2FS_IPU_UTIL,  0x08: F2FS_IPU_SSR_UTIL,
-                               0x10: F2FS_IPU_FSYNC.
+                               0x10: F2FS_IPU_FSYNC, 0x40: F2FS_IPU_NOCACHE.
+                              Refer segment.h for details.
 
  min_ipu_util                 This parameter controls the threshold to trigger
                               in-place-updates. The number indicates percentage
index 72cf257..1d3bb26 100644 (file)
@@ -3289,7 +3289,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
 
        stat_inc_inplace_blocks(fio->sbi);
 
-       if (fio->bio)
+       if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
                err = f2fs_merge_page_bio(fio);
        else
                err = f2fs_submit_page_bio(fio);
index a1b3951..5e6cd8d 100644 (file)
@@ -608,6 +608,7 @@ static inline int utilization(struct f2fs_sb_info *sbi)
  * F2FS_IPU_FSYNC - activated in fsync path only for high performance flash
  *                     storages. IPU will be triggered only if the # of dirty
  *                     pages over min_fsync_blocks.
+ * F2FS_IPU_NOCACHE - disable IPU bio cache.
  * F2FS_IPUT_DISABLE - disable IPU. (=default option)
  */
 #define DEF_MIN_IPU_UTIL       70
@@ -623,6 +624,7 @@ enum {
        F2FS_IPU_SSR_UTIL,
        F2FS_IPU_FSYNC,
        F2FS_IPU_ASYNC,
+       F2FS_IPU_NOCACHE,
 };
 
 static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,