diff options
Diffstat (limited to 'drivers/md/md.c')
| -rw-r--r-- | drivers/md/md.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index fcd098794d37..3f6203a4c7ea 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -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);  |