2021-05-14 18:37:06

by David Wysochanski

[permalink] [raw]
Subject: [PATCH 0/1] Add callback address and state to nfsd client info

For troubleshooting, it is useful to show the callback address and state,
even though we do have this equivalent info inside Chuck's ftrace patches.
Note there is a show_cb_state() inside fs/nfsd/trace.h and this code
has a similar function. It may be better to consolidate these two
if these additions are ok for nfsd client info, but not sure where
a good header is to place it - do we need a new file, maybe
fs/nfsd/nfs4callback.h?

Dave Wysochanski (1):
nfsd4: Expose the callback address and state of each NFS4 client

fs/nfsd/nfs4state.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

--
1.8.3.1



2021-05-14 18:38:00

by David Wysochanski

[permalink] [raw]
Subject: [PATCH 1/1] nfsd4: Expose the callback address and state of each NFS4 client

In addition to the client's address, display the callback channel
state and address in the 'info' file.

Signed-off-by: Dave Wysochanski <[email protected]>
---
fs/nfsd/nfs4state.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 49c052243b5c..89a7cada334d 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2357,6 +2357,21 @@ static void seq_quote_mem(struct seq_file *m, char *data, int len)
seq_printf(m, "\"");
}

+static const char *cb_state_str(int state)
+{
+ switch (state) {
+ case NFSD4_CB_UP:
+ return "UP";
+ case NFSD4_CB_UNKNOWN:
+ return "UNKNOWN";
+ case NFSD4_CB_DOWN:
+ return "DOWN";
+ case NFSD4_CB_FAULT:
+ return "FAULT";
+ }
+ return "UNDEFINED";
+}
+
static int client_info_show(struct seq_file *m, void *v)
{
struct inode *inode = m->private;
@@ -2385,6 +2400,8 @@ static int client_info_show(struct seq_file *m, void *v)
seq_printf(m, "\nImplementation time: [%lld, %ld]\n",
clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec);
}
+ seq_printf(m, "callback state: %s\n", cb_state_str(clp->cl_cb_state));
+ seq_printf(m, "callback address: %pISpc\n", &clp->cl_cb_conn.cb_addr);
drop_client(clp);

return 0;
--
1.8.3.1


2021-05-14 19:06:19

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/1] Add callback address and state to nfsd client info

On Fri, May 14, 2021 at 09:30:40AM -0400, Dave Wysochanski wrote:
> For troubleshooting, it is useful to show the callback address and state,
> even though we do have this equivalent info inside Chuck's ftrace patches.

Good idea.

> Note there is a show_cb_state() inside fs/nfsd/trace.h and this code
> has a similar function. It may be better to consolidate these two
> if these additions are ok for nfsd client info, but not sure where
> a good header is to place it - do we need a new file, maybe
> fs/nfsd/nfs4callback.h?

nfs4state.c already includes trace.h, do we need anything more?

I'll admit I've just been adding things wherever seems expedient for a
while, so there may be some more logical way to organize nfsd headers.

--b.

>
> Dave Wysochanski (1):
> nfsd4: Expose the callback address and state of each NFS4 client
>
> fs/nfsd/nfs4state.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> --
> 1.8.3.1

2021-05-14 19:27:45

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH 1/1] nfsd4: Expose the callback address and state of each NFS4 client

Howdy Dave-

> On May 14, 2021, at 9:30 AM, Dave Wysochanski <[email protected]> wrote:
>
> In addition to the client's address, display the callback channel
> state and address in the 'info' file.
>
> Signed-off-by: Dave Wysochanski <[email protected]>
> ---
> fs/nfsd/nfs4state.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 49c052243b5c..89a7cada334d 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -2357,6 +2357,21 @@ static void seq_quote_mem(struct seq_file *m, char *data, int len)
> seq_printf(m, "\"");
> }
>
> +static const char *cb_state_str(int state)
> +{
> + switch (state) {
> + case NFSD4_CB_UP:
> + return "UP";
> + case NFSD4_CB_UNKNOWN:
> + return "UNKNOWN";
> + case NFSD4_CB_DOWN:
> + return "DOWN";
> + case NFSD4_CB_FAULT:
> + return "FAULT";

No objection to the addition of this information. Style nit:
the "case" and "switch" lines should have the same amount of
indentation.


> + }
> + return "UNDEFINED";
> +}
> +
> static int client_info_show(struct seq_file *m, void *v)
> {
> struct inode *inode = m->private;
> @@ -2385,6 +2400,8 @@ static int client_info_show(struct seq_file *m, void *v)
> seq_printf(m, "\nImplementation time: [%lld, %ld]\n",
> clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec);
> }
> + seq_printf(m, "callback state: %s\n", cb_state_str(clp->cl_cb_state));
> + seq_printf(m, "callback address: %pISpc\n", &clp->cl_cb_conn.cb_addr);
> drop_client(clp);
>
> return 0;
> --
> 1.8.3.1
>

--
Chuck Lever




2021-05-14 19:44:11

by David Wysochanski

[permalink] [raw]
Subject: Re: [PATCH 1/1] nfsd4: Expose the callback address and state of each NFS4 client

On Fri, May 14, 2021 at 11:06 AM Chuck Lever III <[email protected]> wrote:
>
> Howdy Dave-
>
> > On May 14, 2021, at 9:30 AM, Dave Wysochanski <[email protected]> wrote:
> >
> > In addition to the client's address, display the callback channel
> > state and address in the 'info' file.
> >
> > Signed-off-by: Dave Wysochanski <[email protected]>
> > ---
> > fs/nfsd/nfs4state.c | 17 +++++++++++++++++
> > 1 file changed, 17 insertions(+)
> >
> > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > index 49c052243b5c..89a7cada334d 100644
> > --- a/fs/nfsd/nfs4state.c
> > +++ b/fs/nfsd/nfs4state.c
> > @@ -2357,6 +2357,21 @@ static void seq_quote_mem(struct seq_file *m, char *data, int len)
> > seq_printf(m, "\"");
> > }
> >
> > +static const char *cb_state_str(int state)
> > +{
> > + switch (state) {
> > + case NFSD4_CB_UP:
> > + return "UP";
> > + case NFSD4_CB_UNKNOWN:
> > + return "UNKNOWN";
> > + case NFSD4_CB_DOWN:
> > + return "DOWN";
> > + case NFSD4_CB_FAULT:
> > + return "FAULT";
>
> No objection to the addition of this information. Style nit:
> the "case" and "switch" lines should have the same amount of
> indentation.
>

whoops! Thanks Chuck - I'll be sure to run checkpatch and fix it up in v2.

>
> > + }
> > + return "UNDEFINED";
> > +}
> > +
> > static int client_info_show(struct seq_file *m, void *v)
> > {
> > struct inode *inode = m->private;
> > @@ -2385,6 +2400,8 @@ static int client_info_show(struct seq_file *m, void *v)
> > seq_printf(m, "\nImplementation time: [%lld, %ld]\n",
> > clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec);
> > }
> > + seq_printf(m, "callback state: %s\n", cb_state_str(clp->cl_cb_state));
> > + seq_printf(m, "callback address: %pISpc\n", &clp->cl_cb_conn.cb_addr);
> > drop_client(clp);
> >
> > return 0;
> > --
> > 1.8.3.1
> >
>
> --
> Chuck Lever
>
>
>


2021-05-14 19:49:28

by David Wysochanski

[permalink] [raw]
Subject: Re: [PATCH 0/1] Add callback address and state to nfsd client info

On Fri, May 14, 2021 at 10:15 AM Bruce Fields <[email protected]> wrote:
>
> On Fri, May 14, 2021 at 09:30:40AM -0400, Dave Wysochanski wrote:
> > For troubleshooting, it is useful to show the callback address and state,
> > even though we do have this equivalent info inside Chuck's ftrace patches.
>
> Good idea.
>
> > Note there is a show_cb_state() inside fs/nfsd/trace.h and this code
> > has a similar function. It may be better to consolidate these two
> > if these additions are ok for nfsd client info, but not sure where
> > a good header is to place it - do we need a new file, maybe
> > fs/nfsd/nfs4callback.h?
>
> nfs4state.c already includes trace.h, do we need anything more?
>

Probably not. I am testing a renamed function (I find that
"<typename>2str" is more common in the kernel) "cb_state2str"
defined in fs/nfsd/trace.c and declaration in fs/nfsd/trace.h

If that makes sense I'll send a v2.




> I'll admit I've just been adding things wherever seems expedient for a
> while, so there may be some more logical way to organize nfsd headers.
>
> --b.
>
> >
> > Dave Wysochanski (1):
> > nfsd4: Expose the callback address and state of each NFS4 client
> >
> > fs/nfsd/nfs4state.c | 17 +++++++++++++++++
> > 1 file changed, 17 insertions(+)
> >
> > --
> > 1.8.3.1
>