]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Check for minimum partition size
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 16 Feb 2024 17:07:32 +0000 (09:07 -0800)
committerGitHub <noreply@github.com>
Fri, 16 Feb 2024 17:07:32 +0000 (09:07 -0800)
On Linux block devices used for vdevs will by partitioned.  The block
device must be large enough for an 64M partition starting at offset
of 2048 sectors (part1), and a second 64M reserved partition at the
end of the device (part9).

This commit adds a capacity check when creating the GPT label to
immediately detect a device which is too small.  With the existing
code this would be caught slightly latter when attempting to use
the partition.  Catching it sooner let's us print a more useful error.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #15898

lib/libzfs/os/linux/libzfs_pool_os.c

index 401151b1afb530b077a5f8b1d09920b9e7d619c9..86eef3255bc2f1723f8c61e60ed4764b5ea41e8a 100644 (file)
@@ -273,6 +273,16 @@ zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, const char *name)
        vtoc->efi_parts[0].p_start = start_block;
        vtoc->efi_parts[0].p_size = slice_size;
 
+       if (vtoc->efi_parts[0].p_size * vtoc->efi_lbasize < SPA_MINDEVSIZE) {
+               (void) close(fd);
+               efi_free(vtoc);
+
+               zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot "
+                   "label '%s': partition would be less than the minimum "
+                   "device size (64M)"), path);
+               return (zfs_error(hdl, EZFS_LABELFAILED, errbuf));
+       }
+
        /*
         * Why we use V_USR: V_BACKUP confuses users, and is considered
         * disposable by some EFI utilities (since EFI doesn't have a backup