diff options
author | Neil Brown <neilb@suse.de> | 2004-01-22 03:10:29 +0100 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2004-01-22 03:10:29 +0100 |
commit | 98c6faba80e6db0693f99faf5c6525ef4f1fb680 (patch) | |
tree | 73c58aeb3bd022665431cc513ce2bfd6f1560cd4 /mdassemble.c | |
parent | mdadm-1.4.0 (diff) | |
download | mdadm-98c6faba80e6db0693f99faf5c6525ef4f1fb680.tar.xz mdadm-98c6faba80e6db0693f99faf5c6525ef4f1fb680.zip |
mdadm-1.5.0mdadm-1.5.0
Diffstat (limited to 'mdassemble.c')
-rw-r--r-- | mdassemble.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/mdassemble.c b/mdassemble.c new file mode 100644 index 00000000..55055dd1 --- /dev/null +++ b/mdassemble.c @@ -0,0 +1,97 @@ +/* + * mdassemble - assemble Linux "md" devices aka RAID arrays. + * + * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au> + * Copyright (C) 2003 Luca Berra <bluca@vodka.it> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Neil Brown + * Email: <neilb@cse.unsw.edu.au> + * Paper: Neil Brown + * School of Computer Science and Engineering + * The University of New South Wales + * Sydney, 2052 + * Australia + */ + +#include "mdadm.h" +#include "md_p.h" + +/* from readme.c */ +mapping_t pers[] = { + { "linear", -1}, + { "raid0", 0}, + { "0", 0}, + { "stripe", 0}, + { "raid1", 1}, + { "1", 1}, + { "mirror", 1}, + { "raid4", 4}, + { "4", 4}, + { "raid5", 5}, + { "5", 5}, + { "multipath", -4}, + { "mp", -4}, + { NULL, 0} +}; + +/* from mdadm.c */ +int open_mddev(char *dev) +{ + int mdfd = open(dev, O_RDWR, 0); + if (mdfd < 0) + fprintf(stderr, Name ": error opening %s: %s\n", + dev, strerror(errno)); + else if (md_get_version(mdfd) <= 0) { + fprintf(stderr, Name ": %s does not appear to be an md device\n", + dev); + close(mdfd); + mdfd = -1; + } + return mdfd; +} + +char *configfile = NULL; +int rv; +int mdfd = -1; +int runstop = 0; +int readonly = 0; +int verbose = 0; +int force = 0; + +int main() { + mddev_ident_t array_list = conf_get_ident(configfile, 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); + 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); + } +} |