From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Benjamin Marzinski Date: Tue, 20 Dec 2022 17:41:11 -0600 Subject: [PATCH] libmultipath: make prflag an enum In preparation for a future patch, make prflag an enum, and change the reply of cli_getprstatus() to a string. Signed-off-by: Benjamin Marzinski Reviewed-by: Martin Wilck --- libmpathpersist/mpath_persist.c | 2 +- libmultipath/structs.h | 8 +++++++- multipathd/cli_handlers.c | 16 +++++++++------- multipathd/main.c | 14 +++++++------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c index d0744773..e361435a 100644 --- a/libmpathpersist/mpath_persist.c +++ b/libmpathpersist/mpath_persist.c @@ -949,7 +949,7 @@ int update_map_pr(struct multipath *mpp) if (isFound) { - mpp->prflag = 1; + mpp->prflag = PRFLAG_SET; condlog(2, "%s: prflag flag set.", mpp->alias ); } diff --git a/libmultipath/structs.h b/libmultipath/structs.h index 44980b4e..8acea3cb 100644 --- a/libmultipath/structs.h +++ b/libmultipath/structs.h @@ -377,6 +377,12 @@ struct path { typedef int (pgpolicyfn) (struct multipath *, vector); + +enum prflag_value { + PRFLAG_UNSET, + PRFLAG_SET, +}; + struct multipath { char wwid[WWID_SIZE]; char alias_old[WWID_SIZE]; @@ -450,7 +456,7 @@ struct multipath { int prkey_source; struct be64 reservation_key; uint8_t sa_flags; - unsigned char prflag; + int prflag; int all_tg_pt; struct gen_multipath generic_mp; bool fpin_must_reload; diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c index 8b4bd187..6dbbb7e2 100644 --- a/multipathd/cli_handlers.c +++ b/multipathd/cli_handlers.c @@ -1407,6 +1407,10 @@ cli_shutdown (void * v, char ** reply, int * len, void * data) int cli_getprstatus (void * v, char ** reply, int * len, void * data) { + static const char * const prflag_str[] = { + [PRFLAG_UNSET] = "unset\n", + [PRFLAG_SET] = "set\n", + }; struct multipath * mpp; struct vectors * vecs = (struct vectors *)data; char * param = get_keyparam(v, MAP); @@ -1418,9 +1422,7 @@ cli_getprstatus (void * v, char ** reply, int * len, void * data) if (!mpp) return 1; - condlog(3, "%s: prflag = %u", param, (unsigned int)mpp->prflag); - - *len = asprintf(reply, "%d", mpp->prflag); + *len = asprintf(reply, "%s", prflag_str[mpp->prflag]); if (*len < 0) return 1; @@ -1443,8 +1445,8 @@ cli_setprstatus(void * v, char ** reply, int * len, void * data) if (!mpp) return 1; - if (!mpp->prflag) { - mpp->prflag = 1; + if (mpp->prflag != PRFLAG_SET) { + mpp->prflag = PRFLAG_SET; condlog(2, "%s: prflag set", param); } @@ -1466,8 +1468,8 @@ cli_unsetprstatus(void * v, char ** reply, int * len, void * data) if (!mpp) return 1; - if (mpp->prflag) { - mpp->prflag = 0; + if (mpp->prflag != PRFLAG_UNSET) { + mpp->prflag = PRFLAG_UNSET; condlog(2, "%s: prflag unset", param); } diff --git a/multipathd/main.c b/multipathd/main.c index d84027dc..81bb0deb 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -571,9 +571,9 @@ fail: sync_map_state(mpp); - if (!mpp->prflag) + if (mpp->prflag == PRFLAG_UNSET) update_map_pr(mpp); - if (mpp->prflag) + if (mpp->prflag == PRFLAG_SET) pr_register_active_paths(mpp); if (retries < 0) @@ -1034,7 +1034,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map) int start_waiter = 0; int ret; int ro; - unsigned char prflag = 0; + unsigned char prflag = PRFLAG_UNSET; /* * need path UID to go any further @@ -1162,7 +1162,7 @@ rescan: if (retries >= 0) { if (start_waiter) update_map_pr(mpp); - if (mpp->prflag && !prflag) + if (mpp->prflag == PRFLAG_SET && prflag == PRFLAG_UNSET) pr_register_active_paths(mpp); condlog(2, "%s [%s]: path added to devmap %s", pp->dev, pp->dev_t, mpp->alias); @@ -2306,7 +2306,7 @@ check_path (struct vectors * vecs, struct path * pp, unsigned int ticks) } if (newstate == PATH_UP || newstate == PATH_GHOST) { - if (pp->mpp->prflag) { + if (pp->mpp->prflag == PRFLAG_SET) { /* * Check Persistent Reservation. */ @@ -2632,7 +2632,7 @@ configure (struct vectors * vecs) if (remember_wwid(mpp->wwid) == 1) trigger_paths_udev_change(mpp, true); update_map_pr(mpp); - if (mpp->prflag) + if (mpp->prflag == PRFLAG_SET) pr_register_active_paths(mpp); } @@ -3438,7 +3438,7 @@ void * mpath_pr_event_handler_fn (void * pathp ) { condlog(0,"%s: Reservation registration failed. Error: %d", pp->dev, ret); } - mpp->prflag = 1; + mpp->prflag = PRFLAG_SET; free(param); out: