char *dname = dv->devname;
unsigned long long freesize;
int dfd;
+ char *doff;
if (strcasecmp(dname, "missing")==0) {
if (first_missing > dnum)
missing_disks ++;
continue;
}
+ if (data_offset != VARIABLE_OFFSET) {
+ doff = strchr(dname, ':');
+ if (doff) {
+ *doff++ = 0;
+ dv->data_offset = parse_size(doff);
+ } else
+ dv->data_offset = INVALID_SECTORS;
+ } else
+ dv->data_offset = data_offset;
+
dfd = open(dname, O_RDONLY);
if (dfd < 0) {
pr_err("cannot open %s: %s\n",
switch (st->ss->validate_geometry(
st, s->level, s->layout, s->raiddisks,
&s->chunk, s->size*2,
- data_offset, dname,
+ dv->data_offset, dname,
&freesize, c->verbose > 0)) {
case -1: /* Not valid, message printed, and not
* worth checking any further */
if (!st->ss->validate_geometry(st, s->level, s->layout,
s->raiddisks,
&s->chunk, s->size*2,
- data_offset,
+ dv->data_offset,
dname, &freesize,
c->verbose >= 0)) {
if (fd >= 0)
remove_partitions(fd);
if (st->ss->add_to_super(st, &inf->disk,
- fd, dv->devname)) {
+ fd, dv->devname,
+ dv->data_offset)) {
ioctl(mdfd, STOP_ARRAY, NULL);
goto abort;
}