X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=mdassemble.c;h=b0d87b8362e7ceee98571d7ae9ceff12f71ba526;hb=2b4ca8f079335c1b3f345ec13da58699aaa0269d;hp=55055dd18386d97797ee6dd14239c06ef656a064;hpb=98c6faba80e6db0693f99faf5c6525ef4f1fb680;p=thirdparty%2Fmdadm.git diff --git a/mdassemble.c b/mdassemble.c index 55055dd1..b0d87b83 100644 --- a/mdassemble.c +++ b/mdassemble.c @@ -1,7 +1,7 @@ /* * mdassemble - assemble Linux "md" devices aka RAID arrays. * - * Copyright (C) 2001-2002 Neil Brown + * Copyright (C) 2001-2006 Neil Brown * Copyright (C) 2003 Luca Berra * * @@ -46,13 +46,18 @@ mapping_t pers[] = { { "5", 5}, { "multipath", -4}, { "mp", -4}, + { "raid6", 6}, + { "6", 6}, + { "raid10", 10}, + { "10", 10}, { NULL, 0} }; -/* from mdadm.c */ -int open_mddev(char *dev) +#ifndef MDASSEMBLE_AUTO +/* from mdopen.c */ +int open_mddev(char *dev, int autof/*unused */) { - int mdfd = open(dev, O_RDWR, 0); + int mdfd = open(dev, O_RDWR); if (mdfd < 0) fprintf(stderr, Name ": error opening %s: %s\n", dev, strerror(errno)); @@ -64,8 +69,8 @@ int open_mddev(char *dev) } return mdfd; } +#endif -char *configfile = NULL; int rv; int mdfd = -1; int runstop = 0; @@ -73,25 +78,27 @@ int readonly = 0; int verbose = 0; int force = 0; -int main() { - mddev_ident_t array_list = conf_get_ident(configfile, NULL); +int main(int argc, char *argv[]) { + mddev_ident_t array_list = conf_get_ident(NULL); if (!array_list) { fprintf(stderr, Name ": No arrays found in config file\n"); rv = 1; } else for (; array_list; array_list = array_list->next) { mdu_array_info_t array; - mdfd = open_mddev(array_list->devname); + mdfd = open_mddev(array_list->devname, array_list->autof); if (mdfd < 0) { rv |= 1; continue; } - if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0) - /* already assembled, skip */ - continue; - rv |= Assemble(array_list->devname, mdfd, - array_list, configfile, - NULL, - readonly, runstop, NULL, verbose, force); + if (ioctl(mdfd, GET_ARRAY_INFO, &array) < 0) { + rv |= Assemble(array_list->st, array_list->devname, mdfd, + array_list, NULL, NULL, + readonly, runstop, NULL, NULL, verbose, force); + } else { + rv |= Manage_ro(array_list->devname, mdfd, -1); /* make it readwrite */ + } + close(mdfd); } + return rv; }