diff options
| author | Li Nan <linan122@huawei.com> | 2025-09-18 19:57:58 +0800 |
|---|---|---|
| committer | Yu Kuai <yukuai@fnnas.com> | 2025-11-11 11:17:33 +0800 |
| commit | 6c6b66f65e5510eb5de6a2342d6b37ac5c7bd678 (patch) | |
| tree | 4585d49637f6518a4b4c02a40693e6f5a51d9e9c | |
| parent | a811db39198817c91b60adb5e2a8f8bfe76012e4 (diff) | |
md: prevent adding disks with larger logical_block_size to active arrays
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>
| -rw-r--r-- | drivers/md/md.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 66219cf16a5e..9f9dd1f4496f 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -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); |