diff options
author | Dan Williams <dan.j.williams@intel.com> | 2009-01-20 01:36:50 -0700 |
---|---|---|
committer | root <root@dwillia2-linux.ch.intel.com> | 2009-01-20 01:36:50 -0700 |
commit | 66afdfa977d087a9cfae3175175537affd5ac6de (patch) | |
tree | 8da3fd7898249223574de3f74b19f75d46b7d0b8 /Assemble.c | |
parent | 1ffd2840df56eab568a5744c8d8a8484a42c18e2 (diff) | |
download | mdadm-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.c | 3 |
1 files changed, 1 insertions, 2 deletions
@@ -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 ; |