Commit 2e2c6e9b authored by Jaegeuk Kim's avatar Jaegeuk Kim

f2fs: remove power-of-two limitation of zoned device

In f2fs, there's no reason to force po2.
Reviewed-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 55847850
...@@ -1523,7 +1523,6 @@ struct f2fs_sb_info { ...@@ -1523,7 +1523,6 @@ struct f2fs_sb_info {
#ifdef CONFIG_BLK_DEV_ZONED #ifdef CONFIG_BLK_DEV_ZONED
unsigned int blocks_per_blkz; /* F2FS blocks per zone */ unsigned int blocks_per_blkz; /* F2FS blocks per zone */
unsigned int log_blocks_per_blkz; /* log2 F2FS blocks per zone */
#endif #endif
/* for node-related operations */ /* for node-related operations */
...@@ -4390,7 +4389,7 @@ F2FS_FEATURE_FUNCS(readonly, RO); ...@@ -4390,7 +4389,7 @@ F2FS_FEATURE_FUNCS(readonly, RO);
static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi, static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
block_t blkaddr) 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); return test_bit(zno, FDEV(devi).blkz_seq);
} }
......
...@@ -2093,8 +2093,8 @@ static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs) ...@@ -2093,8 +2093,8 @@ static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs)
FDEV(last_dev).end_blk = FDEV(last_dev).end_blk =
(long long)FDEV(last_dev).end_blk + blks; (long long)FDEV(last_dev).end_blk + blks;
#ifdef CONFIG_BLK_DEV_ZONED #ifdef CONFIG_BLK_DEV_ZONED
FDEV(last_dev).nr_blkz = (int)FDEV(last_dev).nr_blkz + FDEV(last_dev).nr_blkz = FDEV(last_dev).nr_blkz +
(int)(blks >> sbi->log_blocks_per_blkz); div_u64(blks, sbi->blocks_per_blkz);
#endif #endif
} }
} }
......
...@@ -2075,7 +2075,7 @@ void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi, ...@@ -2075,7 +2075,7 @@ void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
if (force && start >= cpc->trim_start && if (force && start >= cpc->trim_start &&
(end - 1) <= cpc->trim_end) (end - 1) <= cpc->trim_end)
continue; continue;
/* Should cover 2MB zoned device for zone-based reset */ /* Should cover 2MB zoned device for zone-based reset */
if (!f2fs_sb_has_blkzoned(sbi) && if (!f2fs_sb_has_blkzoned(sbi) &&
......
...@@ -3806,12 +3806,8 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi) ...@@ -3806,12 +3806,8 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
SECTOR_TO_BLOCK(zone_sectors)) SECTOR_TO_BLOCK(zone_sectors))
return -EINVAL; return -EINVAL;
sbi->blocks_per_blkz = SECTOR_TO_BLOCK(zone_sectors); sbi->blocks_per_blkz = SECTOR_TO_BLOCK(zone_sectors);
if (sbi->log_blocks_per_blkz && sbi->log_blocks_per_blkz != FDEV(devi).nr_blkz = div_u64(SECTOR_TO_BLOCK(nr_sectors),
__ilog2_u32(sbi->blocks_per_blkz)) 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;
if (nr_sectors & (zone_sectors - 1)) if (nr_sectors & (zone_sectors - 1))
FDEV(devi).nr_blkz++; FDEV(devi).nr_blkz++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment