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>
This commit is contained in:
Dan Williams 2009-01-20 01:36:50 -07:00 committed by root
parent 1ffd2840df
commit 66afdfa977
1 changed files with 1 additions and 2 deletions

View File

@ -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 ;