diff options
Diffstat (limited to 'super-intel.c')
-rw-r--r-- | super-intel.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/super-intel.c b/super-intel.c index 74b6f610..561fa34b 100644 --- a/super-intel.c +++ b/super-intel.c @@ -5279,7 +5279,9 @@ static int imsm_bbm_log_size(struct imsm_super *mpb) #ifndef MDASSEMBLE static int validate_geometry_imsm_container(struct supertype *st, int level, int layout, int raiddisks, int chunk, - unsigned long long size, char *dev, + unsigned long long size, + unsigned long long data_offset, + char *dev, unsigned long long *freesize, int verbose) { @@ -5341,7 +5343,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level, } } - *freesize = avail_size_imsm(st, ldsize >> 9, INVALID_SECTORS); + *freesize = avail_size_imsm(st, ldsize >> 9, data_offset); free_imsm(super); return 1; @@ -5878,7 +5880,9 @@ validate_geometry_imsm_orom(struct intel_super *super, int level, int layout, */ static int validate_geometry_imsm_volume(struct supertype *st, int level, int layout, int raiddisks, int *chunk, - unsigned long long size, char *dev, + unsigned long long size, + unsigned long long data_offset, + char *dev, unsigned long long *freesize, int verbose) { @@ -6161,6 +6165,7 @@ static int reserve_space(struct supertype *st, int raiddisks, static int validate_geometry_imsm(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose) { @@ -6176,7 +6181,8 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, /* Must be a fresh device to add to a container */ return validate_geometry_imsm_container(st, level, layout, raiddisks, - chunk?*chunk:0, size, + chunk?*chunk:0, + size, data_offset, dev, freesize, verbose); } @@ -6219,6 +6225,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, /* creating in a given container */ return validate_geometry_imsm_volume(st, level, layout, raiddisks, chunk, size, + data_offset, dev, freesize, verbose); } @@ -6263,7 +6270,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, close(cfd); return validate_geometry_imsm_volume(st, level, layout, raiddisks, chunk, - size, dev, + size, data_offset, dev, freesize, 1) ? 1 : -1; } @@ -9905,7 +9912,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st, imsm_layout, geo->raid_disks + devNumChange, &chunk, - geo->size, + geo->size, INVALID_SECTORS, 0, 0, 1)) change = -1; |