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
71 lines
2.4 KiB
Diff
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);
|
|
}
|