diff mbox series

[1/2] btrfs-progs: mkfs: fix error message for minimum zoned filesystem size

Message ID 20220909214810.761928-2-mcgrof@kernel.org (mailing list archive)
State New, archived
Headers show
Series btrfs-progs: minor mkfs fs size error message enhancements | expand

Commit Message

Luis Chamberlain Sept. 9, 2022, 9:48 p.m. UTC
The minimum size for a filesystem on a zone storage device
actually depends on the size of a devices' zone size, given 5
dedicated zones are required, regardless of their fulll size
of the drive:

  * 2 zones for the primary superblock
  * 1 zone for the system block group
  * 1 zone for a metadata block group
  * 1 zone for a data block group

So the minimum size for a btrfs filesystem for a zone storage
device is completely device specific.

The check for this however complains about the minimum
size required for btrfs in general, not for the above
consideration. Fix the error message so that users
understand the exact reason why mkfs might fail
if you want to create a filesystem which cannot
possibly fit into less than 5 zones. Also clarify how
the minimum size then is completely device specific.

Without this a user can end up scratching their heads
if they tried to create say a 512 MiB filesystem on
a 100 GiB NVMe ZNS drive with 128 MiB zone size.
In this case 5 * 128 = 640 MiB is the minimum required.
Without this patch a user will end up with the following
error message:

ERROR: size 268435456 is too small to make a usable filesystem
ERROR: minimum size for a zoned btrfs filesystem is 47185920

Clearly 268435456 (256 MiB) >  47185920 (45 MiB). Fix
the error message so that the user knows what to do if
they want the mimimum filesystem for btrfs zone storage
device.

With this now the user sees:

ERROR: Size 512.00MiB is too small to make a usable filesystem.
ERROR: The minimum size for a zoned btrfs filesystem requires
ERROR: 5 dedicated zones. This device's zone size is 128.00MiB so
ERROR: the minimum size for a btrfs filesystem for this zoned
ERROR: storage device (/dev/nvme5n1) is 640.00MiB

The following fstests fail because of this issue, and at first glance
it was not clear why:

  * brfs/132
  * generic/226
  * generic/416
  * generic/650

Now it's clear what the issue is and what needs to get done to
fix those respective tests. But note, that if working on a sequential
zone then parallel writes are expected to fail, so tests which require
that and use parallel writes must also check for sequential zones
and bail if one is to be used. Each of these tests needs to be adapted
a bit for zoned devices to work properly.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 mkfs/main.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Pankaj Raghav Sept. 14, 2022, 8:28 a.m. UTC | #1
> With this now the user sees:
> 
> ERROR: Size 512.00MiB is too small to make a usable filesystem.
> ERROR: The minimum size for a zoned btrfs filesystem requires
> ERROR: 5 dedicated zones. This device's zone size is 128.00MiB so
> ERROR: the minimum size for a btrfs filesystem for this zoned
> ERROR: storage device (/dev/nvme5n1) is 640.00MiB
> 
> The following fstests fail because of this issue, and at first glance
> it was not clear why:
> 
>   * brfs/132
>   * generic/226
>   * generic/416
>   * generic/650
> 
> Now it's clear what the issue is and what needs to get done to
> fix those respective tests. But note, that if working on a sequential
> zone then parallel writes are expected to fail, so tests which require
> that and use parallel writes must also check for sequential zones
> and bail if one is to be used. Each of these tests needs to be adapted
> a bit for zoned devices to work properly.
> 
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> ---
Looks good,
Reviewed-by: Pankaj Raghav <p.raghav@samsung.com>
diff mbox series

Patch

diff --git a/mkfs/main.c b/mkfs/main.c
index eaecdc061dfe..ebf462587bd5 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -1401,10 +1401,14 @@  int BOX_MAIN(mkfs)(int argc, char **argv)
 	 * 1 zone for a data block group
 	 */
 	if (zoned && block_count && block_count < 5 * zone_size(file)) {
-		error("size %llu is too small to make a usable filesystem",
-			block_count);
-		error("minimum size for a zoned btrfs filesystem is %llu",
-			min_dev_size);
+		error("Size %s is too small to make a usable filesystem.",
+			pretty_size_mode(block_count, UNITS_DEFAULT));
+		error("The minimum size for a zoned btrfs filesystem requires");
+		error("5 dedicated zones. This device's zone size is %s so",
+			pretty_size_mode(zone_size(file), UNITS_DEFAULT));
+		error("the minimum size for a btrfs filesystem for this zoned");
+		error("storage device (%s) is %s",
+			file, pretty_size_mode(5 * zone_size(file), UNITS_DEFAULT));
 		goto error;
 	}