diff mbox series

[v4,1/2] SUNRPC: add verbose parameter to __svc_print_addr()

Message ID 5b0eff4e3ef9bf9621f5095189933f60def40f0d.1690569488.git.lorenzo@kernel.org (mailing list archive)
State New, archived
Headers show
Series add rpc_status handler in nfsd debug filesystem | expand

Commit Message

Lorenzo Bianconi July 28, 2023, 6:44 p.m. UTC
Introduce verbose parameter to utility routine in order to reduce output
verbosity. This is a preliminary patch to add rpc_status entry in nfsd
debug filesystem in order to dump pending RPC requests debugging
information.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 include/linux/sunrpc/svc_xprt.h | 12 ++++++------
 net/sunrpc/svc_xprt.c           |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

Comments

NeilBrown July 28, 2023, 10:13 p.m. UTC | #1
On Sat, 29 Jul 2023, Lorenzo Bianconi wrote:
> Introduce verbose parameter to utility routine in order to reduce output
> verbosity. This is a preliminary patch to add rpc_status entry in nfsd
> debug filesystem in order to dump pending RPC requests debugging
> information.
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
>  include/linux/sunrpc/svc_xprt.h | 12 ++++++------
>  net/sunrpc/svc_xprt.c           |  2 +-
>  2 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
> index a6b12631db21..1715d4c6bd6b 100644
> --- a/include/linux/sunrpc/svc_xprt.h
> +++ b/include/linux/sunrpc/svc_xprt.h
> @@ -209,21 +209,21 @@ static inline unsigned short svc_xprt_remote_port(const struct svc_xprt *xprt)
>  }
>  
>  static inline char *__svc_print_addr(const struct sockaddr *addr,
> -				     char *buf, const size_t len)
> +				     char *buf, const size_t len,
> +				     bool verbose)
>  {
>  	const struct sockaddr_in *sin = (const struct sockaddr_in *)addr;
>  	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)addr;
>  
>  	switch (addr->sa_family) {
>  	case AF_INET:
> -		snprintf(buf, len, "%pI4, port=%u", &sin->sin_addr,
> -			ntohs(sin->sin_port));
> +		snprintf(buf, len, "%pI4, %s%u", &sin->sin_addr,
> +			 verbose ? "port=" : "", ntohs(sin->sin_port));

I would move the "," into the verbose part too.
so
   verbose ? ", port=" : " "

Other than that, I like this approach.

NeilBrown

>  		break;
>  
>  	case AF_INET6:
> -		snprintf(buf, len, "%pI6, port=%u",
> -			 &sin6->sin6_addr,
> -			ntohs(sin6->sin6_port));
> +		snprintf(buf, len, "%pI6, %s%u", &sin6->sin6_addr,
> +			 verbose ? "port=" : "", ntohs(sin6->sin6_port));
>  		break;
>  
>  	default:
> diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
> index 62c7919ea610..16b794d291a4 100644
> --- a/net/sunrpc/svc_xprt.c
> +++ b/net/sunrpc/svc_xprt.c
> @@ -386,7 +386,7 @@ EXPORT_SYMBOL_GPL(svc_xprt_copy_addrs);
>   */
>  char *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len)
>  {
> -	return __svc_print_addr(svc_addr(rqstp), buf, len);
> +	return __svc_print_addr(svc_addr(rqstp), buf, len, true);
>  }
>  EXPORT_SYMBOL_GPL(svc_print_addr);
>  
> -- 
> 2.41.0
> 
>
Jeff Layton July 31, 2023, 4:11 p.m. UTC | #2
On Sat, 2023-07-29 at 08:13 +1000, NeilBrown wrote:
> On Sat, 29 Jul 2023, Lorenzo Bianconi wrote:
> > Introduce verbose parameter to utility routine in order to reduce output
> > verbosity. This is a preliminary patch to add rpc_status entry in nfsd
> > debug filesystem in order to dump pending RPC requests debugging
> > information.
> > 
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> >  include/linux/sunrpc/svc_xprt.h | 12 ++++++------
> >  net/sunrpc/svc_xprt.c           |  2 +-
> >  2 files changed, 7 insertions(+), 7 deletions(-)
> > 
> > diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
> > index a6b12631db21..1715d4c6bd6b 100644
> > --- a/include/linux/sunrpc/svc_xprt.h
> > +++ b/include/linux/sunrpc/svc_xprt.h
> > @@ -209,21 +209,21 @@ static inline unsigned short svc_xprt_remote_port(const struct svc_xprt *xprt)
> >  }
> >  
> >  static inline char *__svc_print_addr(const struct sockaddr *addr,
> > -				     char *buf, const size_t len)
> > +				     char *buf, const size_t len,
> > +				     bool verbose)
> >  {
> >  	const struct sockaddr_in *sin = (const struct sockaddr_in *)addr;
> >  	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)addr;
> >  
> >  	switch (addr->sa_family) {
> >  	case AF_INET:
> > -		snprintf(buf, len, "%pI4, port=%u", &sin->sin_addr,
> > -			ntohs(sin->sin_port));
> > +		snprintf(buf, len, "%pI4, %s%u", &sin->sin_addr,
> > +			 verbose ? "port=" : "", ntohs(sin->sin_port));
> 
> I would move the "," into the verbose part too.
> so
>    verbose ? ", port=" : " "
> 
> Other than that, I like this approach.
> 

If we're separating fields in the main seqfile by ' ', then we probably
want to use a different delimiter here in the !verbose case. Maybe ':'
or ',' instead?

Also, ntohs is going to return a short, so the format should probably be
using "%hu" for the port.

> 
> >  		break;
> >  
> >  	case AF_INET6:
> > -		snprintf(buf, len, "%pI6, port=%u",
> > -			 &sin6->sin6_addr,
> > -			ntohs(sin6->sin6_port));
> > +		snprintf(buf, len, "%pI6, %s%u", &sin6->sin6_addr,
> > +			 verbose ? "port=" : "", ntohs(sin6->sin6_port));
> >  		break;
> >  
> >  	default:
> > diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
> > index 62c7919ea610..16b794d291a4 100644
> > --- a/net/sunrpc/svc_xprt.c
> > +++ b/net/sunrpc/svc_xprt.c
> > @@ -386,7 +386,7 @@ EXPORT_SYMBOL_GPL(svc_xprt_copy_addrs);
> >   */
> >  char *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len)
> >  {
> > -	return __svc_print_addr(svc_addr(rqstp), buf, len);
> > +	return __svc_print_addr(svc_addr(rqstp), buf, len, true);
> >  }
> >  EXPORT_SYMBOL_GPL(svc_print_addr);
> >  
> > -- 
> > 2.41.0
> > 
> > 
>
NeilBrown July 31, 2023, 10:15 p.m. UTC | #3
On Tue, 01 Aug 2023, Jeff Layton wrote:
> On Sat, 2023-07-29 at 08:13 +1000, NeilBrown wrote:
> > On Sat, 29 Jul 2023, Lorenzo Bianconi wrote:
> > > Introduce verbose parameter to utility routine in order to reduce output
> > > verbosity. This is a preliminary patch to add rpc_status entry in nfsd
> > > debug filesystem in order to dump pending RPC requests debugging
> > > information.
> > > 
> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > ---
> > >  include/linux/sunrpc/svc_xprt.h | 12 ++++++------
> > >  net/sunrpc/svc_xprt.c           |  2 +-
> > >  2 files changed, 7 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
> > > index a6b12631db21..1715d4c6bd6b 100644
> > > --- a/include/linux/sunrpc/svc_xprt.h
> > > +++ b/include/linux/sunrpc/svc_xprt.h
> > > @@ -209,21 +209,21 @@ static inline unsigned short svc_xprt_remote_port(const struct svc_xprt *xprt)
> > >  }
> > >  
> > >  static inline char *__svc_print_addr(const struct sockaddr *addr,
> > > -				     char *buf, const size_t len)
> > > +				     char *buf, const size_t len,
> > > +				     bool verbose)
> > >  {
> > >  	const struct sockaddr_in *sin = (const struct sockaddr_in *)addr;
> > >  	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)addr;
> > >  
> > >  	switch (addr->sa_family) {
> > >  	case AF_INET:
> > > -		snprintf(buf, len, "%pI4, port=%u", &sin->sin_addr,
> > > -			ntohs(sin->sin_port));
> > > +		snprintf(buf, len, "%pI4, %s%u", &sin->sin_addr,
> > > +			 verbose ? "port=" : "", ntohs(sin->sin_port));
> > 
> > I would move the "," into the verbose part too.
> > so
> >    verbose ? ", port=" : " "
> > 
> > Other than that, I like this approach.
> > 
> 
> If we're separating fields in the main seqfile by ' ', then we probably
> want to use a different delimiter here in the !verbose case. Maybe ':'
> or ',' instead?

Aren't the address and the port two different fields?
Colon is normal for separating host and port, but as IPv6 addresses
contain colons, you would need [IP::V6]:port which is probably isn't
really an improvement.
I would leave address and port as separate fields.

> 
> Also, ntohs is going to return a short, so the format should probably be
> using "%hu" for the port.

Probably.

Thanks,
NeilBrown

> 
> > 
> > >  		break;
> > >  
> > >  	case AF_INET6:
> > > -		snprintf(buf, len, "%pI6, port=%u",
> > > -			 &sin6->sin6_addr,
> > > -			ntohs(sin6->sin6_port));
> > > +		snprintf(buf, len, "%pI6, %s%u", &sin6->sin6_addr,
> > > +			 verbose ? "port=" : "", ntohs(sin6->sin6_port));
> > >  		break;
> > >  
> > >  	default:
> > > diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
> > > index 62c7919ea610..16b794d291a4 100644
> > > --- a/net/sunrpc/svc_xprt.c
> > > +++ b/net/sunrpc/svc_xprt.c
> > > @@ -386,7 +386,7 @@ EXPORT_SYMBOL_GPL(svc_xprt_copy_addrs);
> > >   */
> > >  char *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len)
> > >  {
> > > -	return __svc_print_addr(svc_addr(rqstp), buf, len);
> > > +	return __svc_print_addr(svc_addr(rqstp), buf, len, true);
> > >  }
> > >  EXPORT_SYMBOL_GPL(svc_print_addr);
> > >  
> > > -- 
> > > 2.41.0
> > > 
> > > 
> > 
> 
> -- 
> Jeff Layton <jlayton@kernel.org>
>
diff mbox series

Patch

diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index a6b12631db21..1715d4c6bd6b 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -209,21 +209,21 @@  static inline unsigned short svc_xprt_remote_port(const struct svc_xprt *xprt)
 }
 
 static inline char *__svc_print_addr(const struct sockaddr *addr,
-				     char *buf, const size_t len)
+				     char *buf, const size_t len,
+				     bool verbose)
 {
 	const struct sockaddr_in *sin = (const struct sockaddr_in *)addr;
 	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)addr;
 
 	switch (addr->sa_family) {
 	case AF_INET:
-		snprintf(buf, len, "%pI4, port=%u", &sin->sin_addr,
-			ntohs(sin->sin_port));
+		snprintf(buf, len, "%pI4, %s%u", &sin->sin_addr,
+			 verbose ? "port=" : "", ntohs(sin->sin_port));
 		break;
 
 	case AF_INET6:
-		snprintf(buf, len, "%pI6, port=%u",
-			 &sin6->sin6_addr,
-			ntohs(sin6->sin6_port));
+		snprintf(buf, len, "%pI6, %s%u", &sin6->sin6_addr,
+			 verbose ? "port=" : "", ntohs(sin6->sin6_port));
 		break;
 
 	default:
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index 62c7919ea610..16b794d291a4 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -386,7 +386,7 @@  EXPORT_SYMBOL_GPL(svc_xprt_copy_addrs);
  */
 char *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len)
 {
-	return __svc_print_addr(svc_addr(rqstp), buf, len);
+	return __svc_print_addr(svc_addr(rqstp), buf, len, true);
 }
 EXPORT_SYMBOL_GPL(svc_print_addr);