]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
md: prevent adding disks with larger logical_block_size to active arrays
authorLi Nan <linan122@huawei.com>
Thu, 18 Sep 2025 11:57:58 +0000 (19:57 +0800)
committerYu Kuai <yukuai@fnnas.com>
Tue, 11 Nov 2025 03:17:33 +0000 (11:17 +0800)
When adding a disk to a md array, avoid updating the array's
logical_block_size to match the new disk. This prevents accidental
partition table loss that renders the array unusable.

The later patch will introduce a way to configure the array's
logical_block_size.

The issue was introduced before Linux 2.6.12-rc2.

Link: https://lore.kernel.org/linux-raid/20250918115759.334067-2-linan666@huaweicloud.com/
Fixes: d2e45eace8 ("[PATCH] Fix raid "bio too big" failures")
Signed-off-by: Li Nan <linan122@huawei.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Yu Kuai <yukuai@fnnas.com>
drivers/md/md.c

index 66219cf16a5e8928b084a5d318772ea116bd6435..9f9dd1f4496fdd271221b5581a0f8b70da138cb5 100644 (file)
@@ -6067,6 +6067,13 @@ int mddev_stack_new_rdev(struct mddev *mddev, struct md_rdev *rdev)
        if (mddev_is_dm(mddev))
                return 0;
 
+       if (queue_logical_block_size(rdev->bdev->bd_disk->queue) >
+           queue_logical_block_size(mddev->gendisk->queue)) {
+               pr_err("%s: incompatible logical_block_size, can not add\n",
+                      mdname(mddev));
+               return -EINVAL;
+       }
+
        lim = queue_limits_start_update(mddev->gendisk->queue);
        queue_limits_stack_bdev(&lim, rdev->bdev, rdev->data_offset,
                                mddev->gendisk->disk_name);