f2fs: remove power-of-two limitation of zoned device
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 18 Apr 2023 00:12:52 +0000 (17:12 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 24 Apr 2023 18:03:10 +0000 (11:03 -0700)
In f2fs, there's no reason to force po2.

Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h
fs/f2fs/gc.c
fs/f2fs/segment.c
fs/f2fs/super.c

index d87044516fe92146d3cee43bfb7de4ab83dd3e6e..d211ee89c1586ba66d04d6aa6191b55e2a33e3ac 100644 (file)
@@ -1523,7 +1523,6 @@ struct f2fs_sb_info {
 
 #ifdef CONFIG_BLK_DEV_ZONED
        unsigned int blocks_per_blkz;           /* F2FS blocks per zone */
-       unsigned int log_blocks_per_blkz;       /* log2 F2FS blocks per zone */
 #endif
 
        /* for node-related operations */
@@ -4390,7 +4389,7 @@ F2FS_FEATURE_FUNCS(readonly, RO);
 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
                                    block_t blkaddr)
 {
-       unsigned int zno = blkaddr >> sbi->log_blocks_per_blkz;
+       unsigned int zno = blkaddr / sbi->blocks_per_blkz;
 
        return test_bit(zno, FDEV(devi).blkz_seq);
 }
index a6a0dc471b74785e1e9acb39969d4b418845a461..61c5f9d26018e641e046a816e61688d821003219 100644 (file)
@@ -2093,8 +2093,8 @@ static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs)
                FDEV(last_dev).end_blk =
                                (long long)FDEV(last_dev).end_blk + blks;
 #ifdef CONFIG_BLK_DEV_ZONED
-               FDEV(last_dev).nr_blkz = (int)FDEV(last_dev).nr_blkz +
-                                       (int)(blks >> sbi->log_blocks_per_blkz);
+               FDEV(last_dev).nr_blkz = FDEV(last_dev).nr_blkz +
+                                       div_u64(blks, sbi->blocks_per_blkz);
 #endif
        }
 }
index c35476b3c0753d6290b4614b7a833687cb5abb17..641bd8cc54daa824f45fdfb0708301d56e79b223 100644 (file)
@@ -2075,7 +2075,7 @@ void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
 
                if (force && start >= cpc->trim_start &&
                                        (end - 1) <= cpc->trim_end)
-                               continue;
+                       continue;
 
                /* Should cover 2MB zoned device for zone-based reset */
                if (!f2fs_sb_has_blkzoned(sbi) &&
index 4e53b1100b84a6edd7aedd2caa1c73bacfb9c391..9f15b03037dba9cde515f2dc96172785438aa6f7 100644 (file)
@@ -3806,12 +3806,8 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
                                SECTOR_TO_BLOCK(zone_sectors))
                return -EINVAL;
        sbi->blocks_per_blkz = SECTOR_TO_BLOCK(zone_sectors);
-       if (sbi->log_blocks_per_blkz && sbi->log_blocks_per_blkz !=
-                               __ilog2_u32(sbi->blocks_per_blkz))
-               return -EINVAL;
-       sbi->log_blocks_per_blkz = __ilog2_u32(sbi->blocks_per_blkz);
-       FDEV(devi).nr_blkz = SECTOR_TO_BLOCK(nr_sectors) >>
-                                       sbi->log_blocks_per_blkz;
+       FDEV(devi).nr_blkz = div_u64(SECTOR_TO_BLOCK(nr_sectors),
+                                       sbi->blocks_per_blkz);
        if (nr_sectors & (zone_sectors - 1))
                FDEV(devi).nr_blkz++;