device-mapper-multipath/0164-libmpathpersist-fix-command-keyword-ordering.patch
Benjamin Marzinski 5a8898b817 device-mapper-multipath-0.8.7-40
Add 0150-libmpathpersist-retry-commands-on-other-paths-in-mpa.patch
Add 0151-libmpathpersist-check-released-key-against-the-reser.patch
Add 0152-multipathd-remove-thread-from-mpath_pr_event_handle.patch
Add 0153-libmpathpersist-remove-uneeded-wrapper-function.patch
Add 0154-libmpathpersist-reduce-log-level-for-persistent-rese.patch
Add 0155-libmpathpersist-remove-pointless-update_map_pr-ret-v.patch
Add 0156-multipathd-use-update_map_pr-in-mpath_pr_event_handl.patch
Add 0157-libmpathpersist-limit-changing-prflag-in-update_map_.patch
Add 0158-multipathd-Don-t-call-update_map_pr-unnecessarily.patch
Add 0159-libmpathpersist-remove-useless-function-send_prout_a.patch
Add 0160-libmpathpersist-fix-memory-leak-in-mpath_prout_rel.patch
Add 0161-limpathpersist-redesign-failed-release-workaround.patch
Add 0162-libmpathpersist-fail-the-release-if-all-threads-fail.patch
Add 0163-limpathpersist-Handle-changing-key-corner-case.patch
Add 0164-libmpathpersist-fix-command-keyword-ordering.patch
Add 0165-libmpathpersist-use-conf-timeout-for-updating-persis.patch
Add 0166-libmapthpersist-Handle-REGISTER-AND-IGNORE-changing-.patch
Add 0167-libmultipath-rename-prflag_value-enums.patch
Add 0168-libmpathpersist-use-a-switch-statement-for-prout-com.patch
Add 0169-libmpathpersist-Add-safety-check-for-preempting-on-k.patch
Add 0170-limpathpersist-remove-update_map_pr-code-for-NULL-pp.patch
Add 0171-libmpathpersist-move-update_map_pr-to-multipathd.patch
Add 0172-multipathd-clean-up-update_map_pr-and-mpath_pr_event.patch
Add 0173-libmpathpersist-clean-up-duplicate-function-declarat.patch
Add 0174-multipathd-wrap-setting-and-unsetting-prflag.patch
Add 0175-multipathd-unregister-PR-key-when-path-is-restored-i.patch
Add 0176-libmpathpersist-Fix-up-reservation_key-checking.patch
Add 0177-libmpathpersist-change-how-reservation-conflicts-are.patch
Add 0178-libmpathpersist-Clear-prkey-in-multipathd-before-unr.patch
Add 0179-libmpathpersist-only-clear-the-key-if-we-are-using-t.patch
Add 0180-libmpathpersist-Restore-old-reservation-key-on-failu.patch
Add 0181-libmpatpersist-update-reservation-key-before-checkin.patch
Add 0182-libmpathpersist-retry-on-conflicts-in-mpath_prout_co.patch
Add 0183-libmpathpersist-Don-t-always-fail-registrations-for-.patch
Add 0184-libmpathpersist-Don-t-try-release-workaround-for-inv.patch
Add 0185-libmpathpersist-Don-t-fail-RESERVE-commands-unnecess.patch
Add 0186-libmpathpersist-reregister-keys-when-self-preempting.patch
Add 0187-libmpathpersist-handle-updating-key-race-condition.patch
Add 0188-libmpathpersist-handle-preempting-all-registrants-re.patch
Add 0189-libmpathpersist-Fix-REGISTER-AND-IGNORE-while-holdin.patch
Add 0190-libmpathpersist-Handle-RESERVE-with-reservation-held.patch
Add 0191-libmpathpersist-use-check_holding_reservation-in-mpa.patch
Add 0192-libmpathpersist-Fix-unregistering-while-holding-the-.patch
Add 0193-libmpathpersist-Fix-race-between-restoring-a-path-an.patch
Add 0194-multipathd-Fix-tracking-of-old-PR-key.patch
  * Fixes RHEL-118515 ("There are many bugs in multipath's persistent
    reservation handling")
Resolves: RHEL-118515
2025-10-01 15:39:06 -04:00

71 lines
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Benjamin Marzinski <bmarzins@redhat.com>
Date: Tue, 29 Nov 2022 22:56:48 -0600
Subject: [PATCH] libmpathpersist: fix command keyword ordering
When libmpathpersist was communicating with multipathd, it wasn't using
the correct keyword order for the commands, as specified in the CLI
commands reference. Since commit f812466f, multipathd requires commands
to be ordered correctly. Fix the ordering.
Fixes: f812466f ("multipathd: more robust command parsing")
Reported-by: miaoguanqin <miaoguanqin@huawei.com>
Cc: lixiaokeng <lixiaokeng@huawei.com>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
---
libmpathpersist/mpath_updatepr.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/libmpathpersist/mpath_updatepr.c b/libmpathpersist/mpath_updatepr.c
index 0aca28eb..af2c5549 100644
--- a/libmpathpersist/mpath_updatepr.c
+++ b/libmpathpersist/mpath_updatepr.c
@@ -18,7 +18,7 @@
#include "mpathpr.h"
-static int do_update_pr(char *alias, char *arg)
+static int do_update_pr(char *alias, char *cmd, char *key)
{
int fd;
char str[256];
@@ -31,7 +31,10 @@ static int do_update_pr(char *alias, char *arg)
return -1;
}
- snprintf(str,sizeof(str),"map %s %s", alias, arg);
+ if (key)
+ snprintf(str,sizeof(str),"%s map %s key %s", cmd, alias, key);
+ else
+ snprintf(str,sizeof(str),"%s map %s", cmd, alias);
condlog (2, "%s: pr message=%s", alias, str);
if (send_packet(fd, str) != 0) {
condlog(2, "%s: message=%s send error=%d", alias, str, errno);
@@ -56,18 +59,16 @@ static int do_update_pr(char *alias, char *arg)
}
int update_prflag(char *mapname, int set) {
- return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus");
+ return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus",
+ NULL);
}
int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags) {
char str[256];
- char *flagstr = "";
- if (sa_flags & MPATH_F_APTPL_MASK)
- flagstr = ":aptpl";
- if (prkey)
- sprintf(str, "setprkey key %" PRIx64 "%s", prkey, flagstr);
- else
- sprintf(str, "unsetprkey");
- return do_update_pr(mapname, str);
+ if (!prkey)
+ return do_update_pr(mapname, "unsetprkey", NULL);
+ sprintf(str, "%" PRIx64 "%s", prkey,
+ (sa_flags & MPATH_F_APTPL_MASK) ? ":aptpl" : "");
+ return do_update_pr(mapname, "setprkey", str);
}