diff mbox

[04/10] mpathpersist: add --param-alltgpt option

Message ID 1531510755-16046-5-git-send-email-bmarzins@redhat.com (mailing list archive)
State Not Applicable, archived
Delegated to: christophe varoqui
Headers show

Commit Message

Benjamin Marzinski July 13, 2018, 7:39 p.m. UTC
>From the limited testing I've been able to do, commit 5b54e772
"mpathpersist: add all_tg_pt option", does appear to enable
--param-alltgpt to work correctly on devices that accept the ALL_TG_PT
flag, so I've added the option to mpathpersist.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 libmpathpersist/mpath_persist.c | 10 ++++------
 mpathpersist/main.c             | 11 ++++++++---
 mpathpersist/main.h             |  1 +
 mpathpersist/mpathpersist.8     |  4 ++++
 multipath/multipath.conf.5      |  8 +++++---
 5 files changed, 22 insertions(+), 12 deletions(-)

Comments

Martin Wilck July 16, 2018, 9:59 a.m. UTC | #1
On Fri, 2018-07-13 at 14:39 -0500, Benjamin Marzinski wrote:
> From the limited testing I've been able to do, commit 5b54e772
> "mpathpersist: add all_tg_pt option", does appear to enable
> --param-alltgpt to work correctly on devices that accept the
> ALL_TG_PT
> flag, so I've added the option to mpathpersist.
> 
> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
> ---
>  libmpathpersist/mpath_persist.c | 10 ++++------
>  mpathpersist/main.c             | 11 ++++++++---
>  mpathpersist/main.h             |  1 +
>  mpathpersist/mpathpersist.8     |  4 ++++
>  multipath/multipath.conf.5      |  8 +++++---
>  5 files changed, 22 insertions(+), 12 deletions(-)
> 

Reviewed-by: Martin Wilck <mwilck@suse.com>


> diff --git a/libmpathpersist/mpath_persist.c
> b/libmpathpersist/mpath_persist.c
> index 6e9e67f..61818e0 100644
> --- a/libmpathpersist/mpath_persist.c
> +++ b/libmpathpersist/mpath_persist.c
> @@ -466,11 +466,14 @@ int mpath_prout_reg(struct multipath *mpp,int
> rq_servact, int rq_scope,
>  	int rc;
>  	int count=0;
>  	int status = MPATH_PR_SUCCESS;
> +	int all_tg_pt;
>  	uint64_t sa_key = 0;
>  
>  	if (!mpp)
>  		return MPATH_PR_DMMP_ERROR;
>  
> +	all_tg_pt = (mpp->all_tg_pt == ALL_TG_PT_ON ||
> +		     paramp->sa_flags & MPATH_F_ALL_TG_PT_MASK);
>  	active_pathcount = pathcount(mpp, PATH_UP) + pathcount(mpp,
> PATH_GHOST);
>  
>  	if (active_pathcount == 0) {
> @@ -478,10 +481,6 @@ int mpath_prout_reg(struct multipath *mpp,int
> rq_servact, int rq_scope,
>  		return MPATH_PR_DMMP_ERROR;
>  	}
>  
> -	if ( paramp->sa_flags & MPATH_F_ALL_TG_PT_MASK ) {
> -		condlog (1, "Warning: ALL_TG_PT is set.
> Configuration not supported");
> -	}
> -
>  	struct threadinfo thread[active_pathcount];
>  	int hosts[active_pathcount];
>  
> @@ -518,8 +517,7 @@ int mpath_prout_reg(struct multipath *mpp,int
> rq_servact, int rq_scope,
>  				condlog (1, "%s: %s path not up.
> Skip.", mpp->wwid, pp->dev);
>  				continue;
>  			}
> -			if (mpp->all_tg_pt == ALL_TG_PT_ON &&
> -			    pp->sg_id.host_no != -1) {
> +			if (all_tg_pt && pp->sg_id.host_no != -1) {
>  				for (k = 0; k < count; k++) {
>  					if (pp->sg_id.host_no ==
> hosts[k]) {
>  						condlog(3, "%s: %s
> host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no);
> diff --git a/mpathpersist/main.c b/mpathpersist/main.c
> index 5b37f3a..99151fe 100644
> --- a/mpathpersist/main.c
> +++ b/mpathpersist/main.c
> @@ -118,7 +118,7 @@ int main (int argc, char * argv[])
>  	{
>  		int option_index = 0;
>  
> -		c = getopt_long (argc, argv,
> "v:Cd:hHioZK:S:PAT:skrGILcRX:l:",
> +		c = getopt_long (argc, argv,
> "v:Cd:hHioYZK:S:PAT:skrGILcRX:l:",
>  				long_options, &option_index);
>  		if (c == -1)
>  			break;
> @@ -158,6 +158,10 @@ int main (int argc, char * argv[])
>  				prout_flag = 1;
>  				break;
>  
> +			case 'Y':
> +				param_alltgpt = 1;
> +				++num_prout_param;
> +				break;
>  			case 'Z':
>  				param_aptpl = 1;
>  				++num_prout_param;
> @@ -443,9 +447,9 @@ int main (int argc, char * argv[])
>  		}
>  
>  		if (param_alltgpt)
> -			paramp->sa_flags |= 0x4;
> +			paramp->sa_flags |= MPATH_F_ALL_TG_PT_MASK;
>  		if (param_aptpl)
> -			paramp->sa_flags |= 0x1;
> +			paramp->sa_flags |= MPATH_F_APTPL_MASK;
>  
>  		if (num_transport)
>  		{
> @@ -698,6 +702,7 @@ static void usage(void)
>  			"    --hex|-H                   output
> response in hex\n"
>  			"    --in|-i                    request PR
> In command \n"
>  			"    --out|-o                   request PR
> Out command\n"
> +			"    --param-alltgpt|-Y         PR Out
> parameter 'ALL_TG_PT\n"
>  			"    --param-aptpl|-Z           PR Out
> parameter 'APTPL'\n"
>  			"    --read-keys|-k             PR In: Read
> Keys\n"
>  			"    --param-sark=SARK|-S SARK  PR Out
> parameter service "
> diff --git a/mpathpersist/main.h b/mpathpersist/main.h
> index 5c0e089..beb8a21 100644
> --- a/mpathpersist/main.h
> +++ b/mpathpersist/main.h
> @@ -6,6 +6,7 @@ static struct option long_options[] = {
>  	{"hex", 0, NULL, 'H'},
>  	{"in", 0, NULL, 'i'},
>  	{"out", 0, NULL, 'o'},
> +	{"param-alltgpt", 0, NULL, 'Y'},
>  	{"param-aptpl", 0, NULL, 'Z'},
>  	{"param-rk", 1, NULL, 'K'},
>  	{"param-sark", 1, NULL, 'S'},
> diff --git a/mpathpersist/mpathpersist.8
> b/mpathpersist/mpathpersist.8
> index a8982e6..885491d 100644
> --- a/mpathpersist/mpathpersist.8
> +++ b/mpathpersist/mpathpersist.8
> @@ -87,6 +87,10 @@ Request PR In command.
>  Request PR Out command.
>  .
>  .TP
> +.B \--param-alltgpt|\-Y
> +PR Out parameter 'ALL_TG_PT'.
> +.
> +.TP
>  .B \--param-aptpl|\-Z
>  PR Out parameter 'APTPL'.
>  .
> diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
> index e4b25a0..fb863fd 100644
> --- a/multipath/multipath.conf.5
> +++ b/multipath/multipath.conf.5
> @@ -756,9 +756,11 @@ The default is: \fB<unset>\fR
>  .
>  .TP
>  .B all_tg_pt
> -This must be set to \fByes\fR to successfully use mpathpersist on
> arrays that
> -automatically set and clear registration keys on all target ports
> from a
> -host, instead of per target port per host.
> +Set the 'all targets ports' flag when registering keys with
> mpathpersist. Some
> +arrays automatically set and clear registration keys on all target
> ports from a
> +host, instead of per target port per host. The ALL_TG_PT flag must
> be set to
> +successfully use mpathpersist on these arrays. Setting this option
> is identical
> +to calling mpathpersist with \fI--param-alltgpt\fR
>  .RS
>  .TP
>  The default is: \fBno\fR
diff mbox

Patch

diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
index 6e9e67f..61818e0 100644
--- a/libmpathpersist/mpath_persist.c
+++ b/libmpathpersist/mpath_persist.c
@@ -466,11 +466,14 @@  int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
 	int rc;
 	int count=0;
 	int status = MPATH_PR_SUCCESS;
+	int all_tg_pt;
 	uint64_t sa_key = 0;
 
 	if (!mpp)
 		return MPATH_PR_DMMP_ERROR;
 
+	all_tg_pt = (mpp->all_tg_pt == ALL_TG_PT_ON ||
+		     paramp->sa_flags & MPATH_F_ALL_TG_PT_MASK);
 	active_pathcount = pathcount(mpp, PATH_UP) + pathcount(mpp, PATH_GHOST);
 
 	if (active_pathcount == 0) {
@@ -478,10 +481,6 @@  int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
 		return MPATH_PR_DMMP_ERROR;
 	}
 
-	if ( paramp->sa_flags & MPATH_F_ALL_TG_PT_MASK ) {
-		condlog (1, "Warning: ALL_TG_PT is set. Configuration not supported");
-	}
-
 	struct threadinfo thread[active_pathcount];
 	int hosts[active_pathcount];
 
@@ -518,8 +517,7 @@  int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
 				condlog (1, "%s: %s path not up. Skip.", mpp->wwid, pp->dev);
 				continue;
 			}
-			if (mpp->all_tg_pt == ALL_TG_PT_ON &&
-			    pp->sg_id.host_no != -1) {
+			if (all_tg_pt && pp->sg_id.host_no != -1) {
 				for (k = 0; k < count; k++) {
 					if (pp->sg_id.host_no == hosts[k]) {
 						condlog(3, "%s: %s host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no);
diff --git a/mpathpersist/main.c b/mpathpersist/main.c
index 5b37f3a..99151fe 100644
--- a/mpathpersist/main.c
+++ b/mpathpersist/main.c
@@ -118,7 +118,7 @@  int main (int argc, char * argv[])
 	{
 		int option_index = 0;
 
-		c = getopt_long (argc, argv, "v:Cd:hHioZK:S:PAT:skrGILcRX:l:",
+		c = getopt_long (argc, argv, "v:Cd:hHioYZK:S:PAT:skrGILcRX:l:",
 				long_options, &option_index);
 		if (c == -1)
 			break;
@@ -158,6 +158,10 @@  int main (int argc, char * argv[])
 				prout_flag = 1;
 				break;
 
+			case 'Y':
+				param_alltgpt = 1;
+				++num_prout_param;
+				break;
 			case 'Z':
 				param_aptpl = 1;
 				++num_prout_param;
@@ -443,9 +447,9 @@  int main (int argc, char * argv[])
 		}
 
 		if (param_alltgpt)
-			paramp->sa_flags |= 0x4;
+			paramp->sa_flags |= MPATH_F_ALL_TG_PT_MASK;
 		if (param_aptpl)
-			paramp->sa_flags |= 0x1;
+			paramp->sa_flags |= MPATH_F_APTPL_MASK;
 
 		if (num_transport)
 		{
@@ -698,6 +702,7 @@  static void usage(void)
 			"    --hex|-H                   output response in hex\n"
 			"    --in|-i                    request PR In command \n"
 			"    --out|-o                   request PR Out command\n"
+			"    --param-alltgpt|-Y         PR Out parameter 'ALL_TG_PT\n"
 			"    --param-aptpl|-Z           PR Out parameter 'APTPL'\n"
 			"    --read-keys|-k             PR In: Read Keys\n"
 			"    --param-sark=SARK|-S SARK  PR Out parameter service "
diff --git a/mpathpersist/main.h b/mpathpersist/main.h
index 5c0e089..beb8a21 100644
--- a/mpathpersist/main.h
+++ b/mpathpersist/main.h
@@ -6,6 +6,7 @@  static struct option long_options[] = {
 	{"hex", 0, NULL, 'H'},
 	{"in", 0, NULL, 'i'},
 	{"out", 0, NULL, 'o'},
+	{"param-alltgpt", 0, NULL, 'Y'},
 	{"param-aptpl", 0, NULL, 'Z'},
 	{"param-rk", 1, NULL, 'K'},
 	{"param-sark", 1, NULL, 'S'},
diff --git a/mpathpersist/mpathpersist.8 b/mpathpersist/mpathpersist.8
index a8982e6..885491d 100644
--- a/mpathpersist/mpathpersist.8
+++ b/mpathpersist/mpathpersist.8
@@ -87,6 +87,10 @@  Request PR In command.
 Request PR Out command.
 .
 .TP
+.B \--param-alltgpt|\-Y
+PR Out parameter 'ALL_TG_PT'.
+.
+.TP
 .B \--param-aptpl|\-Z
 PR Out parameter 'APTPL'.
 .
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
index e4b25a0..fb863fd 100644
--- a/multipath/multipath.conf.5
+++ b/multipath/multipath.conf.5
@@ -756,9 +756,11 @@  The default is: \fB<unset>\fR
 .
 .TP
 .B all_tg_pt
-This must be set to \fByes\fR to successfully use mpathpersist on arrays that
-automatically set and clear registration keys on all target ports from a
-host, instead of per target port per host.
+Set the 'all targets ports' flag when registering keys with mpathpersist. Some
+arrays automatically set and clear registration keys on all target ports from a
+host, instead of per target port per host. The ALL_TG_PT flag must be set to
+successfully use mpathpersist on these arrays. Setting this option is identical
+to calling mpathpersist with \fI--param-alltgpt\fR
 .RS
 .TP
 The default is: \fBno\fR