|
@@ -1108,8 +1108,11 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
|
|
|
ret = 0;
|
|
|
}
|
|
|
rdev->sectors = rdev->sb_start;
|
|
|
- /* Limit to 4TB as metadata cannot record more than that */
|
|
|
- if (rdev->sectors >= (2ULL << 32))
|
|
|
+ /* Limit to 4TB as metadata cannot record more than that.
|
|
|
+ * (not needed for Linear and RAID0 as metadata doesn't
|
|
|
+ * record this size)
|
|
|
+ */
|
|
|
+ if (rdev->sectors >= (2ULL << 32) && sb->level >= 1)
|
|
|
rdev->sectors = (2ULL << 32) - 2;
|
|
|
|
|
|
if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
|
|
@@ -1400,7 +1403,7 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
|
|
|
/* Limit to 4TB as metadata cannot record more than that.
|
|
|
* 4TB == 2^32 KB, or 2*2^32 sectors.
|
|
|
*/
|
|
|
- if (num_sectors >= (2ULL << 32))
|
|
|
+ if (num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
|
|
|
num_sectors = (2ULL << 32) - 2;
|
|
|
md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
|
|
|
rdev->sb_page);
|