Detail: determine array state from sysfs

This is easily obtained from sysfs as part of the existing call to
sysfs_read() and it simplifies the code a little too.

Another small step in the process of getting rid of the GET_ARRAY_STATE
ioctl.

Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
Jes Sorensen 2017-04-25 11:40:27 -04:00
parent b75805662e
commit a4dcdb23ea
1 changed files with 4 additions and 5 deletions

View File

@ -86,7 +86,7 @@ int Detail(char *dev, struct context *c)
dev, strerror(errno));
return rv;
}
sra = sysfs_read(fd, NULL, GET_VERSION|GET_DEVS);
sra = sysfs_read(fd, NULL, GET_VERSION | GET_DEVS | GET_ARRAY_STATE);
if (!sra) {
pr_err("%s does not appear to be an md device\n", dev);
close(fd);
@ -94,10 +94,10 @@ int Detail(char *dev, struct context *c)
}
external = (sra != NULL && sra->array.major_version == -1 &&
sra->array.minor_version == -2);
inactive = (sra->array_state == ARRAY_ACTIVE ||
sra->array_state == ARRAY_CLEAR);
st = super_by_fd(fd, &subarray);
if (md_get_array_info(fd, &array) == 0) {
inactive = 0;
} else if (errno == ENODEV && sra) {
if (md_get_array_info(fd, &array) && errno == ENODEV) {
if (sra->array.major_version == -1 &&
sra->array.minor_version == -1 &&
sra->devs == NULL) {
@ -107,7 +107,6 @@ int Detail(char *dev, struct context *c)
return rv;
}
array = sra->array;
inactive = 1;
} else {
pr_err("cannot get array detail for %s: %s\n",
dev, strerror(errno));