X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=Examine.c;h=276e0fa9610e33877e5f8e134ca9a400f4df994e;hp=8a8f8f4461aef2b379d64c77d3842b892190986b;hb=5e747af24abc021073d979925628fec28052a731;hpb=e5eac01f3d52ceb932445f90c0aaa86f244e26e7 diff --git a/Examine.c b/Examine.c index 8a8f8f44..276e0fa9 100644 --- a/Examine.c +++ b/Examine.c @@ -55,13 +55,11 @@ int Examine(mddev_dev_t devlist, int brief, int scan, * If (brief) gather devices for same array and just print a mdadm.conf line including devices= * if devlist==NULL, use conf_get_devs() */ - int fd; - void *super = NULL; + int fd; int rv = 0; int err = 0; struct array { - void *super; struct supertype *st; struct mdinfo info; void *devs; @@ -77,48 +75,52 @@ int Examine(mddev_dev_t devlist, int brief, int scan, if (!scan) { fprintf(stderr,Name ": cannot open %s: %s\n", devlist->devname, strerror(errno)); - err = 1; + rv = 1; } + err = 1; } else { if (!st) st = guess_super(fd); if (st) - err = st->ss->load_super(st, fd, &super, (brief||scan)?NULL:devlist->devname); + err = st->ss->load_super(st, fd, + (brief||scan) ? NULL + :devlist->devname); else { - if (!brief) + if (!brief) { fprintf(stderr, Name ": No md superblock detected on %s.\n", devlist->devname); + rv = 1; + } err = 1; } close(fd); } - if (err) { - rv = 1; + if (err) continue; - } if (SparcAdjust) - st->ss->update_super(NULL, super, "sparc2.2", devlist->devname, 0, 0, NULL); + st->ss->update_super(st, NULL, "sparc2.2", + devlist->devname, 0, 0, NULL); /* Ok, its good enough to try, though the checksum could be wrong */ if (brief) { struct array *ap; char *d; for (ap=arrays; ap; ap=ap->next) { - if (st->ss == ap->st->ss && st->ss->compare_super(&ap->super, super)==0) + if (st->ss == ap->st->ss && + st->ss->compare_super(ap->st, st)==0) break; } if (!ap) { ap = malloc(sizeof(*ap)); - ap->super = super; ap->devs = dl_head(); ap->next = arrays; ap->spares = 0; ap->st = st; arrays = ap; - st->ss->getinfo_super(&ap->info, super); + st->ss->getinfo_super(st, &ap->info); } else { - st->ss->getinfo_super(&ap->info, super); - free(super); + st->ss->getinfo_super(st, &ap->info); + st->ss->free_super(st); } if (!(ap->info.disk.state & MD_DISK_SYNC)) ap->spares++; @@ -126,8 +128,8 @@ int Examine(mddev_dev_t devlist, int brief, int scan, dl_add(ap->devs, d); } else { printf("%s:\n",devlist->devname); - st->ss->examine_super(super, homehost); - free(super); + st->ss->examine_super(st, homehost); + st->ss->free_super(st); } } if (brief) { @@ -135,7 +137,7 @@ int Examine(mddev_dev_t devlist, int brief, int scan, for (ap=arrays; ap; ap=ap->next) { char sep='='; char *d; - ap->st->ss->brief_examine_super(ap->super); + ap->st->ss->brief_examine_super(ap->st); if (ap->spares) printf(" spares=%d", ap->spares); if (brief > 1) { printf(" devices"); @@ -144,7 +146,7 @@ int Examine(mddev_dev_t devlist, int brief, int scan, sep=','; } } - free(ap->super); + ap->st->ss->free_super(ap->st); /* FIXME free ap */ if (ap->spares || brief > 1) printf("\n");