From 007b5899649c131fd0c97340e8ff3605a72d8b9c Mon Sep 17 00:00:00 2001 From: Xiao Ni Date: Mon, 28 Oct 2024 04:08:46 -0400 Subject: [PATCH] Remove name= support in config file Resolves: RHEL-45608 Signed-off-by: Xiao Ni --- ...r1-remove-support-for-name-in-config.patch | 267 ++++++++++++++++++ mdadm.spec | 7 +- 2 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 0168-super1-remove-support-for-name-in-config.patch diff --git a/0168-super1-remove-support-for-name-in-config.patch b/0168-super1-remove-support-for-name-in-config.patch new file mode 100644 index 0000000..39aa777 --- /dev/null +++ b/0168-super1-remove-support-for-name-in-config.patch @@ -0,0 +1,267 @@ +From dcc22ae74a864358b812327a423435b541789a36 Mon Sep 17 00:00:00 2001 +From: Mariusz Tkaczyk +Date: Thu, 1 Feb 2024 12:32:41 +0100 +Subject: [PATCH 1/1] super1: remove support for name= in config + +Only super1 provides "name=" to config. It is recoreded in metadata +so there is no need to duplicate same information. +UUID is our main key. + +It is not used by Incremental and Assemble handles empty name well +because other supertypes don't set it in conf. + +Expectation that the name in config is same as in metadata is bug prone. +Config should be the place where use can define customized settings. + +Remove printing "name=" from mdadm config creation commands. Ignore +the name in config file to keep backward compatibility. Remove +description from man mdadm.conf. + +Update 00conftest because "name" is no longer accepted. +As the name is ignored, error for mdadm --detail is not printed. + +Reported-by: Stefan Fleischmann +Fixes: e2eb503bd797 ("mdadm: Follow POSIX Portable Character Set") +Signed-off-by: Mariusz Tkaczyk +--- + config.c | 12 ++---- + mdadm.conf.5.in | 7 --- + super1.c | 8 ---- + tests/00confnames | 79 ++++++---------------------------- + tests/templates/names_template | 7 +-- + 5 files changed, 19 insertions(+), 94 deletions(-) + +diff --git a/config.c b/config.c +index 9a04cae8..44f7dd2f 100644 +--- a/config.c ++++ b/config.c +@@ -262,6 +262,7 @@ pass: + * @cmdline: context dependent actions. + * + * If criteria passed, set name in @ident. ++ * Note: name is not used by config file, it for cmdline only. + * + * Return: %MDADM_STATUS_SUCCESS or %MDADM_STATUS_ERROR. + */ +@@ -571,7 +572,8 @@ void arrayline(char *line) + mis.super_minor = minor; + } + } else if (strncasecmp(w, "name=", 5) == 0) { +- _ident_set_name(&mis, w + 5, false); ++ /* Ignore name in confile */ ++ continue; + } else if (strncasecmp(w, "bitmap=", 7) == 0) { + if (mis.bitmap_file) + pr_err("only specify bitmap file once. %s ignored\n", +@@ -1279,13 +1281,7 @@ struct mddev_ident *conf_match(struct supertype *st, + array_list->devname); + continue; + } +- if (array_list->name[0] && +- strcasecmp(array_list->name, info->name) != 0) { +- if (verbose >= 2 && array_list->devname) +- pr_err("Name differs from %s.\n", +- array_list->devname); +- continue; +- } ++ + if (array_list->devices && devname && + !match_oneof(array_list->devices, devname)) { + if (verbose >= 2 && array_list->devname) +diff --git a/mdadm.conf.5.in b/mdadm.conf.5.in +index 94e23dd0..787e51e9 100644 +--- a/mdadm.conf.5.in ++++ b/mdadm.conf.5.in +@@ -133,13 +133,6 @@ The value should be a 128 bit uuid in hexadecimal, with punctuation + interspersed if desired. This must match the uuid stored in the + superblock. + .TP +-.B name= +-The value should be a simple textual name as was given to +-.I mdadm +-when the array was created. This must match the name stored in the +-superblock on a device for that device to be included in the array. +-Not all superblock formats support names. +-.TP + .B super\-minor= + The value is an integer which indicates the minor number that was + stored in the superblock when the array was created. When an array is +diff --git a/super1.c b/super1.c +index dfde4629..5fd2228e 100644 +--- a/super1.c ++++ b/super1.c +@@ -645,10 +645,6 @@ static void brief_examine_super1(struct supertype *st, int verbose) + printf(":"); + printf("%02x", sb->set_uuid[i]); + } +- if (sb->set_name[0]) { +- printf(" name="); +- print_quoted(sb->set_name); +- } + printf("\n"); + } + +@@ -875,10 +871,6 @@ static void brief_detail_super1(struct supertype *st, char *subarray) + struct mdp_superblock_1 *sb = st->sb; + int i; + +- if (sb->set_name[0]) { +- printf(" name="); +- print_quoted(sb->set_name); +- } + printf(" UUID="); + for (i = 0; i < 16; i++) { + if ((i & 3) == 0 && i != 0) +diff --git a/tests/00confnames b/tests/00confnames +index 10823f01..191a905f 100644 +--- a/tests/00confnames ++++ b/tests/00confnames +@@ -1,10 +1,8 @@ + set -x -e + . tests/templates/names_template + +-# Test how and from config are handled during Incremental assemblation. +-# 1-6 only tests (no in config). +-# 6-10 and combinations are tested. +-# 11-13 corner cases. ++# Test how is handled during Incremental assemblation with ++# config file and ARRAYLINE specified. + + names_create "/dev/md/name" + local _UUID="$(mdadm -D --export /dev/md127 | grep MD_UUID | cut -d'=' -f2)" +@@ -12,96 +10,47 @@ local _UUID="$(mdadm -D --export /dev/md127 | grep MD_UUID | cut -d'=' -f2)" + + + # 1. definition consistent with metadata name. +-names_make_conf $_UUID "/dev/md/name" "empty" $config ++names_make_conf $_UUID "/dev/md/name" $config + mdadm -S "/dev/md127" + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "name" "name" + mdadm -S "/dev/md127" + + # 2. Same as 1, but use short name form of . +-names_make_conf $_UUID "name" "empty" $config ++names_make_conf $_UUID "name" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "name" "name" + mdadm -S "/dev/md127" + + # 3. Same as 1, but use different than metadata provides. +-names_make_conf $_UUID "/dev/md/other" "empty" $config ++names_make_conf $_UUID "/dev/md/other" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "other" "name" + mdadm -S "/dev/md127" + + # 4. Same as 3, but use short name form of . +-names_make_conf $_UUID "other" "empty" $config ++names_make_conf $_UUID "other" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "other" "name" + mdadm -S "/dev/md127" + +-# 5. Force particular node creation by setting to /dev/mdX. Link is not created in this +-# case. +-names_make_conf $_UUID "/dev/md4" "empty" $config ++# 5. Force particular node creation by setting to /dev/mdX. ++# Link is not created in this case. ++names_make_conf $_UUID "/dev/md4" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md4" "empty" "name" + mdadm -S "/dev/md4" + +-# 6. set to /dev/mdX, same as in metadata. +-# Metadata name and default node used - controversial. Current behavior documented. +-names_make_conf $_UUID "/dev/md22" "name" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 7. set to /dev/mdX, different than in metadata. +-# Metadata name and default node used - controversial. Current behavior documented. +-names_make_conf $_UUID "/dev/md8" "other" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 8. Both and different than in metadata. +-# Metadata name and default node used - controversial. Current behavior documented. +-names_make_conf $_UUID "devnode" "other_name" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 9. set to metadata name, different than in metadata. +-# Metadata name and default node used - controversial. Current behavior documented. +-names_make_conf $_UUID "name" "other_name" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 10. Bad set, no . +-# Metadata name and default node used - expected. +-names_make_conf $_UUID "/im/bad/devname" "empty" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 11. with some special symbols and locales, no . ++# 6. with some special symbols and locales. + # should be ignored. +-names_make_conf $_UUID "tźż-\.,<>st+-" "empty" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 12. No and set. +-# Metadata name and default node used - expected. +-names_make_conf $_UUID "empty" "empty" $config +-mdadm -I $dev0 --config=$config +-names_verify "/dev/md127" "name" "name" +-mdadm -S "/dev/md127" +- +-# 13. No , set to /dev/mdX. +-# Entry should be ignored, it is not ignored but result is good anyway. +-names_make_conf $_UUID "empty" "/dev/md12" $config ++names_make_conf $_UUID "tźż-\.,<>st+-" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "name" "name" + mdadm -S "/dev/md127" + +-# 13. No , with special symbols and locales. +-# Entry should be ignored, it is not ignored but result is good anyway. +-names_make_conf $_UUID "empty" "./\śćń#&" $config ++# 7. No set. ++# Metadata name and default node used. ++names_make_conf $_UUID "empty" $config + mdadm -I $dev0 --config=$config + names_verify "/dev/md127" "name" "name" + mdadm -S "/dev/md127" +diff --git a/tests/templates/names_template b/tests/templates/names_template +index 6181bfaa..1b6cd14b 100644 +--- a/tests/templates/names_template ++++ b/tests/templates/names_template +@@ -63,8 +63,7 @@ function names_verify() { + names_make_conf() { + local UUID="$1" + local WANTED_DEVNAME="$2" +- local WANTED_NAME="$3" +- local CONF="$4" ++ local CONF="$3" + + local LINE="ARRAY metadata=1.2 UUID=$UUID" + +@@ -72,9 +71,5 @@ names_make_conf() { + LINE="$LINE $WANTED_DEVNAME" + fi + +- if [[ "$WANTED_NAME" != "empty" ]]; then +- LINE="$LINE name=$WANTED_NAME" +- fi +- + echo $LINE > $CONF + } +-- +2.41.0 + diff --git a/mdadm.spec b/mdadm.spec index 4086c2d..c5b6e80 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -2,7 +2,7 @@ Summary: The mdadm program controls Linux md devices (software RAID arrays) Name: mdadm Version: 4.2 # extraversion is used to define rhel internal version -%define extraversion 15 +%define extraversion 16 Release: %{extraversion}%{?dist} Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}%{?subversion:-%{subversion}}.tar.xz Source1: mdmonitor.init @@ -181,6 +181,7 @@ Patch163: 0164-mdadm-remove-container_enough-logic.patch Patch164: 0165-Fix-assembling-RAID-volume-by-using-incremental.patch Patch165: 0166-Revert-mdadm-remove-container_enough-logic.patch Patch166: 0167-manage-adjust-checking-subarray-state-in-update_suba.patch +Patch167: 0168-super1-remove-support-for-name-in-config.patch # RHEL customization patches Patch200: mdadm-udev.patch @@ -275,6 +276,10 @@ rm -rf %{buildroot} /usr/share/mdadm/mdcheck %changelog +* Mon Oct 28 2024 Xiao Ni - 4.2-16 +- Remove name= support in config file +- Resolves RHEL-45608 + * Thu Mar 28 2024 Xiao Ni - 4.2-15 - Fix update_subarray on active volume - missing patch - Resolves RHEL-20833