Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.0:Ports
mdadm
0153-Detail-correct-output-for-active-arrays.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0153-Detail-correct-output-for-active-arrays.patch of Package mdadm
From a822017f30e0dadc60a687900c2aa4da32e09a93 Mon Sep 17 00:00:00 2001 From: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Date: Thu, 10 Aug 2017 11:43:48 +0200 Subject: [PATCH] Detail: correct output for active arrays Git-commit: a822017f30e0dadc60a687900c2aa4da32e09a93 Patch-mainline: mdadm-4.0+ References: bsc#1069165, bsc#1069167, bsc#1068030 The check for inactive array is incorrect as it compares it against active array. Introduce a new function md_is_array_active so the check is consistent across the code. As the output contains list of disks in the array include this information in sysfs read. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com> Signed-off-by: Coly Li <colyli@suse.de> --- Detail.c | 15 +++++++-------- mdadm.h | 1 + util.c | 15 +++++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Detail.c b/Detail.c index 2332b85..2c9fb24 100644 --- a/Detail.c +++ b/Detail.c @@ -86,7 +86,8 @@ int Detail(char *dev, struct context *c) dev, strerror(errno)); return rv; } - sra = sysfs_read(fd, NULL, GET_VERSION | GET_DEVS | GET_ARRAY_STATE); + sra = sysfs_read(fd, NULL, GET_VERSION | GET_DEVS | + GET_ARRAY_STATE | GET_STATE); if (!sra) { if (md_get_array_info(fd, &array)) { pr_err("%s does not appear to be an md device\n", dev); @@ -96,8 +97,7 @@ 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); + inactive = (sra != NULL && !md_array_is_active(sra)); st = super_by_fd(fd, &subarray); if (md_get_array_info(fd, &array)) { if (errno == ENODEV) { @@ -314,11 +314,10 @@ int Detail(char *dev, struct context *c) next = array.raid_disks * 2; if (inactive) { struct mdinfo *mdi; - if (sra != NULL) - for (mdi = sra->devs; mdi; mdi = mdi->next) { - disks[next++] = mdi->disk; - disks[next - 1].number = -1; - } + for (mdi = sra->devs; mdi; mdi = mdi->next) { + disks[next++] = mdi->disk; + disks[next - 1].number = -1; + } } else for (d = 0; d < max_disks; d++) { mdu_disk_info_t disk; disk.number = d; diff --git a/mdadm.h b/mdadm.h index ee9b837..191ae8f 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1425,6 +1425,7 @@ extern int Restore_metadata(char *dev, char *dir, struct context *c, int md_array_valid(int fd); int md_array_active(int fd); +int md_array_is_active(struct mdinfo *info); int md_get_array_info(int fd, struct mdu_array_info_s *array); int md_set_array_info(int fd, struct mdu_array_info_s *array); int md_get_disk_info(int fd, struct mdu_disk_info_s *disk); diff --git a/util.c b/util.c index 8eeb509..c1c8509 100644 --- a/util.c +++ b/util.c @@ -228,15 +228,11 @@ int md_array_active(int fd) { struct mdinfo *sra; struct mdu_array_info_s array; - int ret; + int ret = 0; sra = sysfs_read(fd, NULL, GET_ARRAY_STATE); if (sra) { - if (sra->array_state != ARRAY_CLEAR && - sra->array_state != ARRAY_INACTIVE && - sra->array_state != ARRAY_UNKNOWN_STATE) - ret = 0; - else + if (!md_array_is_active(sra)) ret = -ENODEV; free(sra); @@ -251,6 +247,13 @@ int md_array_active(int fd) return !ret; } +int md_array_is_active(struct mdinfo *info) +{ + return (info->array_state != ARRAY_CLEAR && + info->array_state != ARRAY_INACTIVE && + info->array_state != ARRAY_UNKNOWN_STATE); +} + /* * Get array info from the kernel. Longer term we want to deprecate the * ioctl and get it from sysfs. -- 2.13.6
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor