multipathd is now the only program that calls update_map_pr(), so move it there, and make it static. There are no other code changes.
Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com> --- libmpathpersist/libmpathpersist.version | 1 - libmpathpersist/mpath_persist_int.c | 75 ------------------------- libmpathpersist/mpath_persist_int.h | 1 - multipathd/main.c | 75 +++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 77 deletions(-) diff --git a/libmpathpersist/libmpathpersist.version b/libmpathpersist/libmpathpersist.version index b31237db..7f47ea99 100644 --- a/libmpathpersist/libmpathpersist.version +++ b/libmpathpersist/libmpathpersist.version @@ -40,5 +40,4 @@ __LIBMPATHPERSIST_INT_2.0.0 { mpath_alloc_prin_response; prin_do_scsi_ioctl; prout_do_scsi_ioctl; - update_map_pr; }; diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c index afd19bef..c6b2e788 100644 --- a/libmpathpersist/mpath_persist_int.c +++ b/libmpathpersist/mpath_persist_int.c @@ -806,78 +806,3 @@ int do_mpath_persistent_reserve_out(vector curmp, vector pathvec, int fd, } return ret; } - -int update_map_pr(struct multipath *mpp, struct path *pp) -{ - int noisy=0; - struct prin_resp *resp; - unsigned int i; - int ret = MPATH_PR_OTHER, isFound; - bool was_set = (mpp->prflag == PR_SET); - - /* If pr is explicitly unset, it must be manually set */ - if (mpp->prflag == PR_UNSET) - return MPATH_PR_SKIP; - - if (!get_be64(mpp->reservation_key)) - { - /* Nothing to do. Assuming pr mgmt feature is disabled*/ - mpp->prflag = PR_UNSET; - condlog(was_set ? 2 : 4, "%s: reservation_key not set in multipath.conf", mpp->alias); - return MPATH_PR_SKIP; - } - - resp = mpath_alloc_prin_response(MPATH_PRIN_RKEY_SA); - if (!resp) - { - condlog(0,"%s : failed to alloc resp in update_map_pr", mpp->alias); - return MPATH_PR_OTHER; - } - - ret = prin_do_scsi_ioctl(pp->dev, MPATH_PRIN_RKEY_SA, resp, noisy); - if (ret != MPATH_PR_SUCCESS ) - { - if (ret == MPATH_PR_ILLEGAL_REQ) - mpp->prflag = PR_UNSET; - condlog(0,"%s : pr in read keys service action failed Error=%d", mpp->alias, ret); - goto out; - } - mpp->prflag = PR_UNSET; - - if (resp->prin_descriptor.prin_readkeys.additional_length == 0 ) - { - condlog(was_set ? 1 : 3, "%s: No key found. Device may not be registered. ", mpp->alias); - goto out; - } - - condlog(3, "%s: Multipath reservation_key: 0x%" PRIx64 " ", mpp->alias, - get_be64(mpp->reservation_key)); - - isFound =0; - for (i = 0; i < resp->prin_descriptor.prin_readkeys.additional_length/8; i++ ) - { - if (libmp_verbosity >= 3) { - condlog(3, "%s: PR IN READKEYS[%d] reservation key:", - mpp->alias, i); - dumpHex((char *)&resp->prin_descriptor.prin_readkeys.key_list[i * 8], 8, 1); - } - - if (!memcmp(&mpp->reservation_key, &resp->prin_descriptor.prin_readkeys.key_list[i * 8], 8)) { - condlog(3, "%s: reservation key found in pr in readkeys response", mpp->alias); - isFound =1; - } - } - - if (isFound) - { - mpp->prflag = PR_SET; - condlog(was_set ? 3 : 2, "%s: key found. prflag set.", - mpp->alias); - } else - condlog(was_set ? 1 : 3, "%s: key not found. prflag unset.", - mpp->alias); - -out: - free(resp); - return ret; -} diff --git a/libmpathpersist/mpath_persist_int.h b/libmpathpersist/mpath_persist_int.h index 7b32c1e2..ed7b46f7 100644 --- a/libmpathpersist/mpath_persist_int.h +++ b/libmpathpersist/mpath_persist_int.h @@ -20,6 +20,5 @@ int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp * resp, int int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope, unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy); void dumpHex(const char* , int len, int no_ascii); -int update_map_pr(struct multipath *mpp, struct path *pp); #endif /* MPATH_PERSIST_INT_H_INCLUDED */ diff --git a/multipathd/main.c b/multipathd/main.c index d22425f6..fd0c0dba 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -4248,6 +4248,81 @@ static void check_prhold(struct multipath *mpp, struct path *pp) mpp->prhold = PR_SET; } +static int update_map_pr(struct multipath *mpp, struct path *pp) +{ + int noisy=0; + struct prin_resp *resp; + unsigned int i; + int ret = MPATH_PR_OTHER, isFound; + bool was_set = (mpp->prflag == PR_SET); + + /* If pr is explicitly unset, it must be manually set */ + if (mpp->prflag == PR_UNSET) + return MPATH_PR_SKIP; + + if (!get_be64(mpp->reservation_key)) + { + /* Nothing to do. Assuming pr mgmt feature is disabled*/ + mpp->prflag = PR_UNSET; + condlog(was_set ? 2 : 4, "%s: reservation_key not set in multipath.conf", mpp->alias); + return MPATH_PR_SKIP; + } + + resp = mpath_alloc_prin_response(MPATH_PRIN_RKEY_SA); + if (!resp) + { + condlog(0,"%s : failed to alloc resp in update_map_pr", mpp->alias); + return MPATH_PR_OTHER; + } + + ret = prin_do_scsi_ioctl(pp->dev, MPATH_PRIN_RKEY_SA, resp, noisy); + if (ret != MPATH_PR_SUCCESS ) + { + if (ret == MPATH_PR_ILLEGAL_REQ) + mpp->prflag = PR_UNSET; + condlog(0,"%s : pr in read keys service action failed Error=%d", mpp->alias, ret); + goto out; + } + mpp->prflag = PR_UNSET; + + if (resp->prin_descriptor.prin_readkeys.additional_length == 0 ) + { + condlog(was_set ? 1 : 3, "%s: No key found. Device may not be registered. ", mpp->alias); + goto out; + } + + condlog(3, "%s: Multipath reservation_key: 0x%" PRIx64 " ", mpp->alias, + get_be64(mpp->reservation_key)); + + isFound =0; + for (i = 0; i < resp->prin_descriptor.prin_readkeys.additional_length/8; i++ ) + { + if (libmp_verbosity >= 3) { + condlog(3, "%s: PR IN READKEYS[%d] reservation key:", + mpp->alias, i); + dumpHex((char *)&resp->prin_descriptor.prin_readkeys.key_list[i * 8], 8, 1); + } + + if (!memcmp(&mpp->reservation_key, &resp->prin_descriptor.prin_readkeys.key_list[i * 8], 8)) { + condlog(3, "%s: reservation key found in pr in readkeys response", mpp->alias); + isFound =1; + } + } + + if (isFound) + { + mpp->prflag = PR_SET; + condlog(was_set ? 3 : 2, "%s: key found. prflag set.", + mpp->alias); + } else + condlog(was_set ? 1 : 3, "%s: key not found. prflag unset.", + mpp->alias); + +out: + free(resp); + return ret; +} + static void mpath_pr_event_handle(struct path *pp) { struct multipath *mpp = pp->mpp; -- 2.48.1