Wanlong Gao
2011-Nov-23 14:43 UTC
[Libguestfs] [PATCH] New API: mdadm-stop for stopping MD devices.
This API is used to stop a md device. When we want to move a device to another md array, we should stop the md device which contained this device first. Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- daemon/md.c | 16 ++++++++++++++++ generator/generator_actions.ml | 9 +++++++++ regressions/test-mdadm.sh | 14 ++++++++++++++ src/MAX_PROC_NR | 2 +- 4 files changed, 40 insertions(+), 1 deletions(-) diff --git a/daemon/md.c b/daemon/md.c index 82ddb82..9004a6f 100644 --- a/daemon/md.c +++ b/daemon/md.c @@ -310,3 +310,19 @@ error: return NULL; } + +int +do_mdadm_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; +} diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index 925640f..938a543 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -6527,6 +6527,15 @@ The name of the MD device. =back"); + ("mdadm_stop", (RErr, [Device "md"], []), 302, [], + [], + "stop a Linux md (RAID) device", + "\ +This command is a wrap of 'mdadm --stop md'. +Use this command to stop a created Linux md (RAID) device. + +NOTE: This just stop the md device but not remove or zeroed it."); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/regressions/test-mdadm.sh b/regressions/test-mdadm.sh index 8119561..017341a 100755 --- a/regressions/test-mdadm.sh +++ b/regressions/test-mdadm.sh @@ -150,4 +150,18 @@ done ../fish/guestfish --remote exit +eval `../fish/guestfish --listen` +../fish/guestfish --remote add-ro md-test1.img +../fish/guestfish --remote add-ro md-test2.img +../fish/guestfish --remote add-ro md-test3.img +../fish/guestfish --remote add-ro md-test4.img +../fish/guestfish --remote run + +for md in `../fish/guestfish --remote list-md-devices`; do + ../fish/guestfish --remote mdadm-stop "${md}" +done + +../fish/guestfish --remote exit + + rm -f mdadm-detail.out md-test1.img md-test2.img md-test3.img md-test4.img diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index d8fc48a..274f714 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -301 +302 -- 1.7.8.rc3
Wanlong Gao
2011-Nov-23 14:47 UTC
[Libguestfs] [PATCH] New API: mdadm-stop for stopping MD devices.
This API is used to stop a md device. When we want to move a device to another md array, we should stop the md device which contained this device first. Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- daemon/md.c | 16 ++++++++++++++++ generator/generator_actions.ml | 9 +++++++++ regressions/test-mdadm.sh | 14 ++++++++++++++ src/MAX_PROC_NR | 2 +- 4 files changed, 40 insertions(+), 1 deletions(-) diff --git a/daemon/md.c b/daemon/md.c index 82ddb82..9004a6f 100644 --- a/daemon/md.c +++ b/daemon/md.c @@ -310,3 +310,19 @@ error: return NULL; } + +int +do_mdadm_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; +} diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index 925640f..938a543 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -6527,6 +6527,15 @@ The name of the MD device. =back"); + ("mdadm_stop", (RErr, [Device "md"], []), 302, [], + [], + "stop a Linux md (RAID) device", + "\ +This command is a wrap of 'mdadm --stop md'. +Use this command to stop a created Linux md (RAID) device. + +NOTE: This just stop the md device but not remove or zeroed it."); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/regressions/test-mdadm.sh b/regressions/test-mdadm.sh index 8119561..017341a 100755 --- a/regressions/test-mdadm.sh +++ b/regressions/test-mdadm.sh @@ -150,4 +150,18 @@ done ../fish/guestfish --remote exit +eval `../fish/guestfish --listen` +../fish/guestfish --remote add-ro md-test1.img +../fish/guestfish --remote add-ro md-test2.img +../fish/guestfish --remote add-ro md-test3.img +../fish/guestfish --remote add-ro md-test4.img +../fish/guestfish --remote run + +for md in `../fish/guestfish --remote list-md-devices`; do + ../fish/guestfish --remote mdadm-stop "${md}" +done + +../fish/guestfish --remote exit + + rm -f mdadm-detail.out md-test1.img md-test2.img md-test3.img md-test4.img diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index d8fc48a..274f714 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -301 +302 -- 1.7.8.rc3
Matthew Booth
2011-Nov-23 15:02 UTC
[Libguestfs] [PATCH] New API: mdadm-stop for stopping MD devices.
On 23/11/11 14:43, Wanlong Gao wrote:> This API is used to stop a md device. > When we want to move a device to another md array, we should > stop the md device which contained this device first.I'm not convinced we should extend the md api in libguestfs to active manipulation. I wasn't convinced that mdadm-create was worthwhile either, but it made a test case ever so slightly tidier. To me, MD devices are the domain of physical machines. We need to be able to *read* them (for P2V apart from anything else), but I think manipulation is opening an unnecessary can of worms. Matt -- Matthew Booth, RHCA, RHCSS Red Hat Engineering, Virtualisation Team GPG ID: D33C3490 GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490