[PATCH v2] libmpathpersist: set mpp->mpe before selecting reservation_key

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



libmpathpersist was not setting mpp->mpe before calling
select_reservation_key(). This means that if the reservation key was set
in the multipaths sections, it wasn't being selected.

This appeared to work for many commands because of an error in checking
if the correct reservation key was used. If mpp->reservation key was
unset, then it would considered to match if either the RK or SARK was
unset in the command. mpathpersist should fail if it doesn't find a
configured mpp->resevation key, with one exception. To make it easier to
remove old keys, if --register-ignore is called, and the command SARK is
0x0 so the device is being unregistered, allow mpp->reservation_key to
be unset. The code already allows mpp->reservation_key to not match the
command RK in this case.

Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
---

Changes in v2:
Actually base patch on mwilck/tip

 libmpathpersist/mpath_persist_int.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c
index f4d9e7c8..95bbdcd8 100644
--- a/libmpathpersist/mpath_persist_int.c
+++ b/libmpathpersist/mpath_persist_int.c
@@ -652,6 +652,7 @@ int do_mpath_persistent_reserve_out(vector curmp, vector pathvec, int fd,
 		return ret;
 
 	conf = get_multipath_config();
+	mpp->mpe = find_mpe(conf->mptable, mpp->wwid);
 	select_reservation_key(conf, mpp);
 	select_all_tg_pt(conf, mpp);
 	put_multipath_config(conf);
@@ -671,6 +672,12 @@ int do_mpath_persistent_reserve_out(vector curmp, vector pathvec, int fd,
 		}
 	}
 
+	if (!get_be64(mpp->reservation_key) &&
+	    (prkey || rq_servact != MPATH_PROUT_REG_IGN_SA)) {
+		condlog(0, "%s: no configured reservation key", mpp->alias);
+		return MPATH_PR_SYNTAX_ERROR;
+	}
+
 	if (memcmp(paramp->key, &mpp->reservation_key, 8) &&
 	    memcmp(paramp->sa_key, &mpp->reservation_key, 8) &&
 	    (prkey || rq_servact != MPATH_PROUT_REG_IGN_SA)) {
-- 
2.45.0





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux