diff options
author | John Garry <john.g.garry@oracle.com> | 2025-07-29 09:14:48 +0000 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2025-07-29 06:25:08 -0600 |
commit | 1da67b5b1754713b8ea0c3dd847e04790cffd91f (patch) | |
tree | e8f6e38c88b576cf82871c9d9940a25acc3c9509 | |
parent | 448dfecc7ff807822ecd47a5c052acedca7d09e8 (diff) |
block: Enforce power-of-2 physical block size
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>
-rw-r--r-- | block/blk-settings.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/block/blk-settings.c b/block/blk-settings.c index bb192d776bdb..a7a794baba72 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -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 |