]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
block: Enforce power-of-2 physical block size
authorJohn Garry <john.g.garry@oracle.com>
Tue, 29 Jul 2025 09:14:48 +0000 (09:14 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Jul 2025 12:25:08 +0000 (06:25 -0600)
The merging/splitting code and other queue limits checking depends on the
physical block size being a power-of-2, so enforce it.

Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20250729091448.1691334-3-john.g.garry@oracle.com
[axboe: add missing braces]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-settings.c

index bb192d776bdb803c8937406ceb6175e7560d6ee4..a7a794baba72dc171800bdd3e4926719057da99b 100644 (file)
@@ -320,8 +320,12 @@ int blk_validate_limits(struct queue_limits *lim)
                pr_warn("Invalid logical block size (%d)\n", lim->logical_block_size);
                return -EINVAL;
        }
-       if (lim->physical_block_size < lim->logical_block_size)
+       if (lim->physical_block_size < lim->logical_block_size) {
                lim->physical_block_size = lim->logical_block_size;
+       } else if (!is_power_of_2(lim->physical_block_size)) {
+               pr_warn("Invalid physical block size (%d)\n", lim->physical_block_size);
+               return -EINVAL;
+       }
 
        /*
         * The minimum I/O size defaults to the physical block size unless