|
@@ -1105,7 +1105,11 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version)
|
|
|
rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
|
|
|
bmask = queue_hardsect_size(rdev->bdev->bd_disk->queue)-1;
|
|
|
if (rdev->sb_size & bmask)
|
|
|
- rdev-> sb_size = (rdev->sb_size | bmask)+1;
|
|
|
+ rdev->sb_size = (rdev->sb_size | bmask) + 1;
|
|
|
+
|
|
|
+ if (minor_version
|
|
|
+ && rdev->data_offset < sb_offset + (rdev->sb_size/512))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
if (sb->level == cpu_to_le32(LEVEL_MULTIPATH))
|
|
|
rdev->desc_nr = -1;
|
|
@@ -1137,7 +1141,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version)
|
|
|
else
|
|
|
ret = 0;
|
|
|
}
|
|
|
- if (minor_version)
|
|
|
+ if (minor_version)
|
|
|
rdev->size = ((rdev->bdev->bd_inode->i_size>>9) - le64_to_cpu(sb->data_offset)) / 2;
|
|
|
else
|
|
|
rdev->size = rdev->sb_offset;
|