X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fmd.c;h=5a4d8154f254b8352bf3df6bb2606719a158f9e0;hb=615924abaa968398d6529529fa2f31ae23de825b;hp=82ddb82c8ab63a9933e099b7f5c2de71ea499a6f;hpb=c4bd6bba8d88ecf1ebf4a9c2c80a407d9971aaf7;p=libguestfs.git diff --git a/daemon/md.c b/daemon/md.c index 82ddb82..5a4d815 100644 --- a/daemon/md.c +++ b/daemon/md.c @@ -50,9 +50,9 @@ count_bits (uint64_t bitmap) /* Takes optional arguments, consult optargs_bitmask. */ int -do_mdadm_create (const char *name, char *const *devices, - int64_t missingbitmap, int nrdevices, int spare, - int64_t chunk, const char *level) +do_md_create (const char *name, char *const *devices, + int64_t missingbitmap, int nrdevices, int spare, + int64_t chunk, const char *level) { char nrdevices_s[32]; char spare_s[32]; @@ -63,10 +63,10 @@ do_mdadm_create (const char *name, char *const *devices, uint64_t umissingbitmap = (uint64_t) missingbitmap; /* Check the optional parameters and set defaults where appropriate. */ - if (!(optargs_bitmask & GUESTFS_MDADM_CREATE_MISSINGBITMAP_BITMASK)) + if (!(optargs_bitmask & GUESTFS_MD_CREATE_MISSINGBITMAP_BITMASK)) umissingbitmap = 0; - if (optargs_bitmask & GUESTFS_MDADM_CREATE_SPARE_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_SPARE_BITMASK) { if (spare < 0) { reply_with_error ("spare must not be negative"); return -1; @@ -75,7 +75,7 @@ do_mdadm_create (const char *name, char *const *devices, else spare = 0; - if (optargs_bitmask & GUESTFS_MDADM_CREATE_NRDEVICES_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_NRDEVICES_BITMASK) { if (nrdevices < 2) { reply_with_error ("nrdevices is less than 2"); return -1; @@ -84,7 +84,7 @@ do_mdadm_create (const char *name, char *const *devices, else nrdevices = count_strings (devices) + count_bits (umissingbitmap); - if (optargs_bitmask & GUESTFS_MDADM_CREATE_LEVEL_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_LEVEL_BITMASK) { if (STRNEQ (level, "linear") && STRNEQ (level, "raid0") && STRNEQ (level, "0") && STRNEQ (level, "stripe") && STRNEQ (level, "raid1") && STRNEQ (level, "1") && @@ -100,7 +100,7 @@ do_mdadm_create (const char *name, char *const *devices, else level = "raid1"; - if (optargs_bitmask & GUESTFS_MDADM_CREATE_CHUNK_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_CHUNK_BITMASK) { /* chunk is bytes in the libguestfs API, but K when we pass it to mdadm */ if ((chunk & 1023) != 0) { reply_with_error ("chunk size must be a multiple of 1024 bytes"); @@ -131,12 +131,12 @@ do_mdadm_create (const char *name, char *const *devices, ADD_ARG (argv, i, "--raid-devices"); snprintf (nrdevices_s, sizeof nrdevices_s, "%d", nrdevices); ADD_ARG (argv, i, nrdevices_s); - if (optargs_bitmask & GUESTFS_MDADM_CREATE_SPARE_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_SPARE_BITMASK) { ADD_ARG (argv, i, "--spare-devices"); snprintf (spare_s, sizeof spare_s, "%d", spare); ADD_ARG (argv, i, spare_s); } - if (optargs_bitmask & GUESTFS_MDADM_CREATE_CHUNK_BITMASK) { + if (optargs_bitmask & GUESTFS_MD_CREATE_CHUNK_BITMASK) { ADD_ARG (argv, i, "--chunk"); snprintf (chunk_s, sizeof chunk_s, "%" PRIi64, chunk / 1024); ADD_ARG (argv, i, chunk_s); @@ -233,7 +233,7 @@ error: } char ** -do_mdadm_detail(const char *md) +do_md_detail(const char *md) { int r; @@ -243,7 +243,7 @@ do_mdadm_detail(const char *md) char **ret = NULL; int size = 0, alloc = 0; - const char *mdadm[] = { "mdadm", "-DY", md, NULL }; + const char *mdadm[] = { "mdadm", "-D", "--export", md, NULL }; r = commandv(&out, &err, mdadm); if (r == -1) { reply_with_error("%s", err); @@ -257,7 +257,7 @@ do_mdadm_detail(const char *md) goto error; } - /* Parse the output of mdadm -DY: + /* Parse the output of mdadm -D --export: * MD_LEVEL=raid1 * MD_DEVICES=2 * MD_METADATA=1.0 @@ -290,7 +290,7 @@ do_mdadm_detail(const char *md) } else { /* Ignore lines with no equals sign (shouldn't happen). Log to stderr so * it will show up in LIBGUESTFS_DEBUG. */ - fprintf(stderr, "mdadm-detail: unexpected output ignored: %s", line); + fprintf(stderr, "md-detail: unexpected mdadm output ignored: %s", line); } } @@ -310,3 +310,19 @@ error: return NULL; } + +int +do_md_stop(const char *md) +{ + int r; + char *err = NULL; + + const char *mdadm[] = { "mdadm", "--stop", md, NULL}; + r = commandv(NULL, &err, mdadm); + if (r == -1) { + reply_with_error("%s", err); + free(err); + return -1; + } + return 0; +}