summaryrefslogtreecommitdiffstats
path: root/Assemble.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2009-01-20 01:36:50 -0700
committerroot <root@dwillia2-linux.ch.intel.com>2009-01-20 01:36:50 -0700
commit66afdfa977d087a9cfae3175175537affd5ac6de (patch)
tree8da3fd7898249223574de3f74b19f75d46b7d0b8 /Assemble.c
parent1ffd2840df56eab568a5744c8d8a8484a42c18e2 (diff)
downloadmdadm-66afdfa977d087a9cfae3175175537affd5ac6de.tar.gz
mdadm-66afdfa977d087a9cfae3175175537affd5ac6de.tar.xz
mdadm-66afdfa977d087a9cfae3175175537affd5ac6de.zip
Assemble: fix busy detection
Use mddev_busy() as GET_ARRAY_INFO can succeed on 'clear' arrays. Ran into this after an encountering a case where mdadm -Ss ended in segfault (missing check for NULL return from map_by_devnum() in sles11:Manage.c). So, tried to stop the array by hand with echo clear > md/array_state, after which I could not reassemble since GET_ARRAY_INFO was succeeding. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/Assemble.c b/Assemble.c
index 3c55b1e..4d12edc 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -168,7 +168,6 @@ int Assemble(struct supertype *st, char *mddev,
mddev_dev_t tmpdev;
struct mdinfo info;
struct mdinfo *content = NULL;
- mdu_array_info_t tmp_inf;
char *avail;
int nextspare = 0;
char *name = NULL;
@@ -525,7 +524,7 @@ int Assemble(struct supertype *st, char *mddev,
close(mdfd);
return 1;
}
- if (ioctl(mdfd, GET_ARRAY_INFO, &tmp_inf)==0) {
+ if (mddev_busy(fd2devnum(mdfd))) {
fprintf(stderr, Name ": %s already active, cannot restart it!\n",
mddev);
for (tmpdev = devlist ;