02e1f69890
There some bugs need to be fixed. bug2127101 Reshape is started with not allowed chunk size patch (super-intel: make freesize not required for chunk size migration) bug2139789 Installation hangs after RAID degradation bug2149292 mdadm: Couldn't open /dev/vda3 for write - not zeroing patch (mdadm/udev: Don't handle change event on raw devices) bug2151209 Can't remove disk when unplugging a disk patch (incremental, manage: do not verify if remove is safe) bug2148945 mdadm --fail /dev/md0 /dev/pmem1s failed patch (Manage: do not check array state when drive is removed) Resolves: rhbz#2127101, rhbz#2139789, rhbz#2149292, rhbz#2151209, rhbz#2148945 Signed-off-by: Xiao Ni <xni@redhat.com>
107 lines
3.3 KiB
Diff
107 lines
3.3 KiB
Diff
From 4345e135c4c7dd04bb15bad140dfc4747f677738 Mon Sep 17 00:00:00 2001
|
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
|
Date: Mon, 2 Jan 2023 09:35:21 +0100
|
|
Subject: [PATCH 73/83] super-intel: refactor the code for enum
|
|
|
|
It prepares super-intel for change context->update to enum.
|
|
|
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
|
Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
|
|
---
|
|
super-intel.c | 37 +++++++++++++++++++++++++------------
|
|
1 file changed, 25 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/super-intel.c b/super-intel.c
|
|
index 5f93f3d3..85fb7f17 100644
|
|
--- a/super-intel.c
|
|
+++ b/super-intel.c
|
|
@@ -3930,7 +3930,8 @@ static int update_super_imsm(struct supertype *st, struct mdinfo *info,
|
|
|
|
mpb = super->anchor;
|
|
|
|
- if (strcmp(update, "uuid") == 0) {
|
|
+ switch (map_name(update_options, update)) {
|
|
+ case UOPT_UUID:
|
|
/* We take this to mean that the family_num should be updated.
|
|
* However that is much smaller than the uuid so we cannot really
|
|
* allow an explicit uuid to be given. And it is hard to reliably
|
|
@@ -3954,10 +3955,14 @@ static int update_super_imsm(struct supertype *st, struct mdinfo *info,
|
|
}
|
|
if (rv == 0)
|
|
mpb->orig_family_num = info->uuid[0];
|
|
- } else if (strcmp(update, "assemble") == 0)
|
|
+ break;
|
|
+ case UOPT_SPEC_ASSEMBLE:
|
|
rv = 0;
|
|
- else
|
|
+ break;
|
|
+ default:
|
|
rv = -1;
|
|
+ break;
|
|
+ }
|
|
|
|
/* successful update? recompute checksum */
|
|
if (rv == 0)
|
|
@@ -7889,17 +7894,25 @@ static int kill_subarray_imsm(struct supertype *st, char *subarray_id)
|
|
return 0;
|
|
}
|
|
|
|
-static int get_rwh_policy_from_update(char *update)
|
|
+/**
|
|
+ * get_rwh_policy_from_update() - Get the rwh policy for update option.
|
|
+ * @update: Update option.
|
|
+ */
|
|
+static int get_rwh_policy_from_update(enum update_opt update)
|
|
{
|
|
- if (strcmp(update, "ppl") == 0)
|
|
+ switch (update) {
|
|
+ case UOPT_PPL:
|
|
return RWH_MULTIPLE_DISTRIBUTED;
|
|
- else if (strcmp(update, "no-ppl") == 0)
|
|
+ case UOPT_NO_PPL:
|
|
return RWH_MULTIPLE_OFF;
|
|
- else if (strcmp(update, "bitmap") == 0)
|
|
+ case UOPT_BITMAP:
|
|
return RWH_BITMAP;
|
|
- else if (strcmp(update, "no-bitmap") == 0)
|
|
+ case UOPT_NO_BITMAP:
|
|
return RWH_OFF;
|
|
- return -1;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ return UOPT_UNDEFINED;
|
|
}
|
|
|
|
static int update_subarray_imsm(struct supertype *st, char *subarray,
|
|
@@ -7909,7 +7922,7 @@ static int update_subarray_imsm(struct supertype *st, char *subarray,
|
|
struct intel_super *super = st->sb;
|
|
struct imsm_super *mpb = super->anchor;
|
|
|
|
- if (strcmp(update, "name") == 0) {
|
|
+ if (map_name(update_options, update) == UOPT_NAME) {
|
|
char *name = ident->name;
|
|
char *ep;
|
|
int vol;
|
|
@@ -7943,7 +7956,7 @@ static int update_subarray_imsm(struct supertype *st, char *subarray,
|
|
}
|
|
super->updates_pending++;
|
|
}
|
|
- } else if (get_rwh_policy_from_update(update) != -1) {
|
|
+ } else if (get_rwh_policy_from_update(map_name(update_options, update)) != UOPT_UNDEFINED) {
|
|
int new_policy;
|
|
char *ep;
|
|
int vol = strtoul(subarray, &ep, 10);
|
|
@@ -7951,7 +7964,7 @@ static int update_subarray_imsm(struct supertype *st, char *subarray,
|
|
if (*ep != '\0' || vol >= super->anchor->num_raid_devs)
|
|
return 2;
|
|
|
|
- new_policy = get_rwh_policy_from_update(update);
|
|
+ new_policy = get_rwh_policy_from_update(map_name(update_options, update));
|
|
|
|
if (st->update_tail) {
|
|
struct imsm_update_rwh_policy *u = xmalloc(sizeof(*u));
|
|
--
|
|
2.38.1
|
|
|