diff options
author | Artur Paszkiewicz <artur.paszkiewicz@intel.com> | 2017-09-28 14:41:07 +0200 |
---|---|---|
committer | Jes Sorensen <jsorensen@fb.com> | 2017-10-02 22:07:04 +0200 |
commit | 2c8890e926a4c7f9169b5054e3dbf84426fe1025 (patch) | |
tree | b4c0e98d2c0d8848872ed0c837a1f9a788a460f2 /managemon.c | |
parent | mdadm: fixes some trivial typos in comments (diff) | |
download | mdadm-2c8890e926a4c7f9169b5054e3dbf84426fe1025.tar.xz mdadm-2c8890e926a4c7f9169b5054e3dbf84426fe1025.zip |
Don't abort starting the array if kernel does not support ppl
Change the behavior of assemble and create for consistency-policy=ppl
for external metadata arrays. If the kernel does not support ppl, don't
abort but print a warning and start the array without ppl
(consistency-policy=resync). No change for native md arrays because the
kernel will not allow starting the array if it finds an unsupported
feature bit in the superblock.
In sysfs_add_disk() check consistency_policy in the mdinfo structure
that represents the array, not the disk and read the current consistency
policy from sysfs in mdmon's manage_member(). This is necessary to make
sysfs_add_disk() honor the actual consistency policy and not what is in
the metadata. Also remove all the places where consistency_policy is set
for a disk's mdinfo - it is a property of the array, not the disk.
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Diffstat (limited to 'managemon.c')
-rw-r--r-- | managemon.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/managemon.c b/managemon.c index 68f0c2d3..cc3c6f10 100644 --- a/managemon.c +++ b/managemon.c @@ -477,7 +477,7 @@ static void manage_member(struct mdstat_ent *mdstat, char buf[64]; int frozen; struct supertype *container = a->container; - unsigned long long int component_size = 0; + struct mdinfo *mdi; if (container == NULL) /* Raced with something */ @@ -489,8 +489,13 @@ static void manage_member(struct mdstat_ent *mdstat, // MORE } - if (sysfs_get_ll(&a->info, NULL, "component_size", &component_size) >= 0) - a->info.component_size = component_size << 1; + mdi = sysfs_read(-1, mdstat->devnm, + GET_COMPONENT|GET_CONSISTENCY_POLICY); + if (mdi) { + a->info.component_size = mdi->component_size; + a->info.consistency_policy = mdi->consistency_policy; + sysfs_free(mdi); + } /* honor 'frozen' */ if (sysfs_get_str(&a->info, NULL, "metadata_version", buf, sizeof(buf)) > 0) |