mkfs.f2fs: not allow to format too small sized partition
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 24 May 2018 01:12:14 +0000 (18:12 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 28 Aug 2018 06:49:26 +0000 (23:49 -0700)
For example, if we want to format 40MB image, it'll give 12 segments for main
area. And, it assigns 6 for current segments, 11 for ovp segments, and 10 for
reserved segments. So, we have 5 free segments, which we can't handle:
 # of free segments < # of reserved segments.

Reported-by: Daniel Rosenberg <drosen@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
mkfs/f2fs_format.c

index 0a99a77..3ab5236 100644 (file)
@@ -408,18 +408,19 @@ static int f2fs_prepare_super_block(void)
        if (c.overprovision == 0)
                c.overprovision = get_best_overprovision(sb);
 
+       c.reserved_segments =
+                       (2 * (100 / c.overprovision + 1) + NR_CURSEG_TYPE)
+                       * c.segs_per_sec;
+
        if (c.overprovision == 0 || c.total_segments < F2FS_MIN_SEGMENTS ||
                (c.devices[0].total_sectors *
                        c.sector_size < zone_align_start_offset) ||
-               (get_sb(segment_count_main) - 2) < c.reserved_segments) {
+               (get_sb(segment_count_main) - NR_CURSEG_TYPE) <
+                                               c.reserved_segments) {
                MSG(0, "\tError: Device size is not sufficient for F2FS volume\n");
                return -1;
        }
 
-       c.reserved_segments =
-                       (2 * (100 / c.overprovision + 1) + 6)
-                       * c.segs_per_sec;
-
        uuid_generate(sb->uuid);
 
        /* precompute checksum seed for metadata */