X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=Grow.c;h=fc007d6bbe27892edae0a395455c946a44a003e6;hb=5dcfcb715d91f7d2f45afaaabb93ad311e384ea6;hp=3c22741c078c4506fdd969952adfc4404d81ae56;hpb=1686dc25ecf60a9b7691d73fc2b5a7e08184c940;p=thirdparty%2Fmdadm.git diff --git a/Grow.c b/Grow.c index 3c22741c..fc007d6b 100644 --- a/Grow.c +++ b/Grow.c @@ -69,7 +69,7 @@ int Grow_Add_device(char *devname, int fd, char *newdev) return 1; } - nfd = open(newdev, O_RDWR|O_EXCL); + nfd = open(newdev, O_RDWR|O_EXCL|O_DIRECT); if (nfd < 0) { fprintf(stderr, Name ": cannot open %s\n", newdev); return 1; @@ -435,8 +435,8 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, int nrdisks; int err; - struct sysarray *sra; - struct sysdev *sd; + struct mdinfo *sra; + struct mdinfo *sd; if (ioctl(fd, GET_ARRAY_INFO, &array) < 0) { fprintf(stderr, Name ": %s is not an active md array - aborting\n", @@ -631,13 +631,13 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, devname); return 1; } - if (sra->spares == 0 && backup_file == NULL) { + if (sra->array.spare_disks == 0 && backup_file == NULL) { fprintf(stderr, Name ": %s: Cannot grow - need a spare or backup-file to backup critical section\n", devname); return 1; } - nrdisks = array.nr_disks + sra->spares; + nrdisks = array.nr_disks + sra->array.spare_disks; /* Now we need to open all these devices so we can read/write. */ fdlist = malloc((1+nrdisks) * sizeof(int)); @@ -650,22 +650,25 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, fdlist[d] = -1; d = array.raid_disks; for (sd = sra->devs; sd; sd=sd->next) { - if (sd->state & (1<disk.state & (1<state & (1<major, sd->minor, 1); - fdlist[sd->role] = dev_open(dn, O_RDONLY); - offsets[sd->role] = sd->offset; - if (fdlist[sd->role] < 0) { + if (sd->disk.state & (1<disk.major, + sd->disk.minor, 1); + fdlist[sd->disk.raid_disk] + = dev_open(dn, O_RDONLY); + offsets[sd->disk.raid_disk] = sd->data_offset; + if (fdlist[sd->disk.raid_disk] < 0) { fprintf(stderr, Name ": %s: cannot open component %s\n", devname, dn?dn:"-unknown-"); goto abort; } } else { /* spare */ - char *dn = map_dev(sd->major, sd->minor, 1); + char *dn = map_dev(sd->disk.major, + sd->disk.minor, 1); fdlist[d] = dev_open(dn, O_RDWR); - offsets[d] = sd->offset; + offsets[d] = sd->data_offset; if (fdlist[d]<0) { fprintf(stderr, Name ": %s: cannot open component %s\n", devname, dn?dn:"-unknown"); @@ -680,7 +683,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, " --grow aborted\n", devname, i); goto abort; } - spares = sra->spares; + spares = sra->array.spare_disks; if (backup_file) { fdlist[d] = open(backup_file, O_RDWR|O_CREAT|O_EXCL, 0600); if (fdlist[d] < 0) {