imsm: metadata only supports a global 'data_offset'

When creating a volume a drive must have free space starting at the same
location as all the other drives in the array.
This commit is contained in:
Dan Williams 2008-07-14 13:59:56 -07:00
parent ef6ffaded4
commit 2da8544a39
1 changed files with 10 additions and 1 deletions

View File

@ -1388,9 +1388,11 @@ static int validate_geometry_imsm_volume(struct supertype *st, int level,
if (!dev) {
/* General test: make sure there is space for
* 'raiddisks' device extents of size 'size'.
* 'raiddisks' device extents of size 'size' at a given
* offset
*/
unsigned long long minsize = size*2 /* convert to blocks */;
unsigned long long start_offset = ~0ULL;
int dcnt = 0;
if (minsize == 0)
minsize = MPB_SECTOR_CNT + IMSM_RESERVED_SECTORS;
@ -1406,6 +1408,13 @@ static int validate_geometry_imsm_volume(struct supertype *st, int level,
esize = e[i].start - pos;
if (esize >= minsize)
found = 1;
if (found && start_offset == ~0ULL) {
start_offset = pos;
break;
} else if (found && pos != start_offset) {
found = 0;
break;
}
pos = e[i].start + e[i].size;
i++;
} while (e[i-1].size);