2008-03-27 21:57:26

by Olga Kornievskaia

[permalink] [raw]
Subject: [PATCH 1/1] bring-back-chatty

From: Olga Kornievskaia <aglo-f4j/[email protected]>

Another attempt to silence call_timeout() prints by bringing back "chatty".

When the client's callback server goes away, the server's callback client
tries to contact the server and times out. For nfsd, it is beneficial to
printout a message when the client is unable to contact the server. For
the callback server, the same message is printed yet it is really not
an error. Thus we need a way to silence the message for the callback
and yet print it for other cases.

---
fs/nfsd/nfs4callback.c | 2 +-
include/linux/sunrpc/clnt.h | 4 +++-
net/sunrpc/clnt.c | 5 ++++-
3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index aae2b29..00d3448 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -367,7 +367,7 @@ static int do_probe_callback(void *data)
.program = program,
.version = nfs_cb_version[1]->number,
.authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
- .flags = (RPC_CLNT_CREATE_NOPING),
+ .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
};
struct rpc_message msg = {
.rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 129a86e..249f7a2 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -42,7 +42,8 @@ struct rpc_clnt {

unsigned int cl_softrtry : 1,/* soft timeouts */
cl_discrtry : 1,/* disconnect before retry */
- cl_autobind : 1;/* use getport() */
+ cl_autobind : 1,/* use getport() */
+ cl_chatty : 1;/* be verbose */

struct rpc_rtt * cl_rtt; /* RTO estimator data */
const struct rpc_timeout *cl_timeout; /* Timeout strategy */
@@ -114,6 +115,7 @@ struct rpc_create_args {
#define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
#define RPC_CLNT_CREATE_NOPING (1UL << 4)
#define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
+#define RPC_CLNT_CREATE_QUIET (1UL << 6)

struct rpc_clnt *rpc_create(struct rpc_create_args *args);
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 8c6a7f1..3aa3348 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -328,6 +328,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
clnt->cl_autobind = 1;
if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
clnt->cl_discrtry = 1;
+ if (args->flags & RPC_CLNT_CREATE_QUIET)
+ clnt->cl_chatty = 0;

return clnt;
}
@@ -1160,7 +1162,8 @@ call_timeout(struct rpc_task *task)
task->tk_timeouts++;

if (RPC_IS_SOFT(task)) {
- printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
+ if (clnt->cl_chatty)
+ printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
clnt->cl_protname, clnt->cl_server);
rpc_exit(task, -EIO);
return;
--
1.5.3.3



2008-03-28 02:44:19

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH 1/1] bring-back-chatty


On Thu, 2008-03-27 at 17:56 -0400, Olga Kornievskaia wrote:
> From: Olga Kornievskaia <aglo-f4j/[email protected]>
>
> Another attempt to silence call_timeout() prints by bringing back "chatty".
>
> When the client's callback server goes away, the server's callback client
> tries to contact the server and times out. For nfsd, it is beneficial to
> printout a message when the client is unable to contact the server. For
> the callback server, the same message is printed yet it is really not
> an error. Thus we need a way to silence the message for the callback
> and yet print it for other cases.
>
> ---
> fs/nfsd/nfs4callback.c | 2 +-
> include/linux/sunrpc/clnt.h | 4 +++-
> net/sunrpc/clnt.c | 5 ++++-
> 3 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
> index aae2b29..00d3448 100644
> --- a/fs/nfsd/nfs4callback.c
> +++ b/fs/nfsd/nfs4callback.c
> @@ -367,7 +367,7 @@ static int do_probe_callback(void *data)
> .program = program,
> .version = nfs_cb_version[1]->number,
> .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
> - .flags = (RPC_CLNT_CREATE_NOPING),
> + .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
> };
> struct rpc_message msg = {
> .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
> index 129a86e..249f7a2 100644
> --- a/include/linux/sunrpc/clnt.h
> +++ b/include/linux/sunrpc/clnt.h
> @@ -42,7 +42,8 @@ struct rpc_clnt {
>
> unsigned int cl_softrtry : 1,/* soft timeouts */
> cl_discrtry : 1,/* disconnect before retry */
> - cl_autobind : 1;/* use getport() */
> + cl_autobind : 1,/* use getport() */
> + cl_chatty : 1;/* be verbose */
>
> struct rpc_rtt * cl_rtt; /* RTO estimator data */
> const struct rpc_timeout *cl_timeout; /* Timeout strategy */
> @@ -114,6 +115,7 @@ struct rpc_create_args {
> #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
> #define RPC_CLNT_CREATE_NOPING (1UL << 4)
> #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
> +#define RPC_CLNT_CREATE_QUIET (1UL << 6)
>
> struct rpc_clnt *rpc_create(struct rpc_create_args *args);
> struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> index 8c6a7f1..3aa3348 100644
> --- a/net/sunrpc/clnt.c
> +++ b/net/sunrpc/clnt.c
> @@ -328,6 +328,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
> clnt->cl_autobind = 1;
> if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
> clnt->cl_discrtry = 1;
> + if (args->flags & RPC_CLNT_CREATE_QUIET)
> + clnt->cl_chatty = 0;

Shouldn't that be
if (!(args->flags & RPC_CLNT_CREATE_QUIET))
clnt->cl_chatty = 1;

since clnt->cl_chatty is automatically initialised to 0?

>
> return clnt;
> }
> @@ -1160,7 +1162,8 @@ call_timeout(struct rpc_task *task)
> task->tk_timeouts++;
>
> if (RPC_IS_SOFT(task)) {
> - printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
> + if (clnt->cl_chatty)
> + printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
> clnt->cl_protname, clnt->cl_server);
> rpc_exit(task, -EIO);
> return;


2008-03-28 15:21:40

by Olga Kornievskaia

[permalink] [raw]
Subject: Re: [PATCH 1/1] bring-back-chatty



Trond Myklebust wrote:
> On Thu, 2008-03-27 at 17:56 -0400, Olga Kornievskaia wrote:
>
>> From: Olga Kornievskaia <aglo-f4j/[email protected]>
>>
>> Another attempt to silence call_timeout() prints by bringing back "chatty".
>>
>> When the client's callback server goes away, the server's callback client
>> tries to contact the server and times out. For nfsd, it is beneficial to
>> printout a message when the client is unable to contact the server. For
>> the callback server, the same message is printed yet it is really not
>> an error. Thus we need a way to silence the message for the callback
>> and yet print it for other cases.
>>
>> ---
>> fs/nfsd/nfs4callback.c | 2 +-
>> include/linux/sunrpc/clnt.h | 4 +++-
>> net/sunrpc/clnt.c | 5 ++++-
>> 3 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
>> index aae2b29..00d3448 100644
>> --- a/fs/nfsd/nfs4callback.c
>> +++ b/fs/nfsd/nfs4callback.c
>> @@ -367,7 +367,7 @@ static int do_probe_callback(void *data)
>> .program = program,
>> .version = nfs_cb_version[1]->number,
>> .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
>> - .flags = (RPC_CLNT_CREATE_NOPING),
>> + .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
>> };
>> struct rpc_message msg = {
>> .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
>> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
>> index 129a86e..249f7a2 100644
>> --- a/include/linux/sunrpc/clnt.h
>> +++ b/include/linux/sunrpc/clnt.h
>> @@ -42,7 +42,8 @@ struct rpc_clnt {
>>
>> unsigned int cl_softrtry : 1,/* soft timeouts */
>> cl_discrtry : 1,/* disconnect before retry */
>> - cl_autobind : 1;/* use getport() */
>> + cl_autobind : 1,/* use getport() */
>> + cl_chatty : 1;/* be verbose */
>>
>> struct rpc_rtt * cl_rtt; /* RTO estimator data */
>> const struct rpc_timeout *cl_timeout; /* Timeout strategy */
>> @@ -114,6 +115,7 @@ struct rpc_create_args {
>> #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
>> #define RPC_CLNT_CREATE_NOPING (1UL << 4)
>> #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
>> +#define RPC_CLNT_CREATE_QUIET (1UL << 6)
>>
>> struct rpc_clnt *rpc_create(struct rpc_create_args *args);
>> struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
>> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
>> index 8c6a7f1..3aa3348 100644
>> --- a/net/sunrpc/clnt.c
>> +++ b/net/sunrpc/clnt.c
>> @@ -328,6 +328,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
>> clnt->cl_autobind = 1;
>> if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
>> clnt->cl_discrtry = 1;
>> + if (args->flags & RPC_CLNT_CREATE_QUIET)
>> + clnt->cl_chatty = 0;
>>
>
> Shouldn't that be
> if (!(args->flags & RPC_CLNT_CREATE_QUIET))
> clnt->cl_chatty = 1;
>
> since clnt->cl_chatty is automatically initialised to 0?
>
clnt->cl_chatty is automatically initialized to 1.

>
>>
>> return clnt;
>> }
>> @@ -1160,7 +1162,8 @@ call_timeout(struct rpc_task *task)
>> task->tk_timeouts++;
>>
>> if (RPC_IS_SOFT(task)) {
>> - printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
>> + if (clnt->cl_chatty)
>> + printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
>> clnt->cl_protname, clnt->cl_server);
>> rpc_exit(task, -EIO);
>> return;
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>

2008-03-28 15:35:02

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH 1/1] bring-back-chatty


On Fri, 2008-03-28 at 11:21 -0400, Olga Kornievskaia wrote:
>
> Trond Myklebust wrote:
> > On Thu, 2008-03-27 at 17:56 -0400, Olga Kornievskaia wrote:
> >
> >> From: Olga Kornievskaia <aglo-f4j/[email protected]>
> >>
> >> Another attempt to silence call_timeout() prints by bringing back "chatty".
> >>
> >> When the client's callback server goes away, the server's callback client
> >> tries to contact the server and times out. For nfsd, it is beneficial to
> >> printout a message when the client is unable to contact the server. For
> >> the callback server, the same message is printed yet it is really not
> >> an error. Thus we need a way to silence the message for the callback
> >> and yet print it for other cases.
> >>
> >> ---
> >> fs/nfsd/nfs4callback.c | 2 +-
> >> include/linux/sunrpc/clnt.h | 4 +++-
> >> net/sunrpc/clnt.c | 5 ++++-
> >> 3 files changed, 8 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
> >> index aae2b29..00d3448 100644
> >> --- a/fs/nfsd/nfs4callback.c
> >> +++ b/fs/nfsd/nfs4callback.c
> >> @@ -367,7 +367,7 @@ static int do_probe_callback(void *data)
> >> .program = program,
> >> .version = nfs_cb_version[1]->number,
> >> .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
> >> - .flags = (RPC_CLNT_CREATE_NOPING),
> >> + .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
> >> };
> >> struct rpc_message msg = {
> >> .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
> >> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
> >> index 129a86e..249f7a2 100644
> >> --- a/include/linux/sunrpc/clnt.h
> >> +++ b/include/linux/sunrpc/clnt.h
> >> @@ -42,7 +42,8 @@ struct rpc_clnt {
> >>
> >> unsigned int cl_softrtry : 1,/* soft timeouts */
> >> cl_discrtry : 1,/* disconnect before retry */
> >> - cl_autobind : 1;/* use getport() */
> >> + cl_autobind : 1,/* use getport() */
> >> + cl_chatty : 1;/* be verbose */
> >>
> >> struct rpc_rtt * cl_rtt; /* RTO estimator data */
> >> const struct rpc_timeout *cl_timeout; /* Timeout strategy */
> >> @@ -114,6 +115,7 @@ struct rpc_create_args {
> >> #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
> >> #define RPC_CLNT_CREATE_NOPING (1UL << 4)
> >> #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
> >> +#define RPC_CLNT_CREATE_QUIET (1UL << 6)
> >>
> >> struct rpc_clnt *rpc_create(struct rpc_create_args *args);
> >> struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
> >> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> >> index 8c6a7f1..3aa3348 100644
> >> --- a/net/sunrpc/clnt.c
> >> +++ b/net/sunrpc/clnt.c
> >> @@ -328,6 +328,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
> >> clnt->cl_autobind = 1;
> >> if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
> >> clnt->cl_discrtry = 1;
> >> + if (args->flags & RPC_CLNT_CREATE_QUIET)
> >> + clnt->cl_chatty = 0;
> >>
> >
> > Shouldn't that be
> > if (!(args->flags & RPC_CLNT_CREATE_QUIET))
> > clnt->cl_chatty = 1;
> >
> > since clnt->cl_chatty is automatically initialised to 0?
> >
> clnt->cl_chatty is automatically initialized to 1.

Where? I couldn't find any other lines that initialise it in this patch.

> >
> >>
> >> return clnt;
> >> }
> >> @@ -1160,7 +1162,8 @@ call_timeout(struct rpc_task *task)
> >> task->tk_timeouts++;
> >>
> >> if (RPC_IS_SOFT(task)) {
> >> - printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
> >> + if (clnt->cl_chatty)
> >> + printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
> >> clnt->cl_protname, clnt->cl_server);
> >> rpc_exit(task, -EIO);
> >> return;
> >>
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
> >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


2008-03-28 15:42:35

by Olga Kornievskaia

[permalink] [raw]
Subject: Re: [PATCH 1/1] bring-back-chatty



Trond Myklebust wrote:
> On Fri, 2008-03-28 at 11:21 -0400, Olga Kornievskaia wrote:
>
>> Trond Myklebust wrote:
>>
>>> On Thu, 2008-03-27 at 17:56 -0400, Olga Kornievskaia wrote:
>>>
>>>
>>>> From: Olga Kornievskaia <aglo-f4j/[email protected]>
>>>>
>>>> Another attempt to silence call_timeout() prints by bringing back "chatty".
>>>>
>>>> When the client's callback server goes away, the server's callback client
>>>> tries to contact the server and times out. For nfsd, it is beneficial to
>>>> printout a message when the client is unable to contact the server. For
>>>> the callback server, the same message is printed yet it is really not
>>>> an error. Thus we need a way to silence the message for the callback
>>>> and yet print it for other cases.
>>>>
>>>> ---
>>>> fs/nfsd/nfs4callback.c | 2 +-
>>>> include/linux/sunrpc/clnt.h | 4 +++-
>>>> net/sunrpc/clnt.c | 5 ++++-
>>>> 3 files changed, 8 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
>>>> index aae2b29..00d3448 100644
>>>> --- a/fs/nfsd/nfs4callback.c
>>>> +++ b/fs/nfsd/nfs4callback.c
>>>> @@ -367,7 +367,7 @@ static int do_probe_callback(void *data)
>>>> .program = program,
>>>> .version = nfs_cb_version[1]->number,
>>>> .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
>>>> - .flags = (RPC_CLNT_CREATE_NOPING),
>>>> + .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
>>>> };
>>>> struct rpc_message msg = {
>>>> .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
>>>> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
>>>> index 129a86e..249f7a2 100644
>>>> --- a/include/linux/sunrpc/clnt.h
>>>> +++ b/include/linux/sunrpc/clnt.h
>>>> @@ -42,7 +42,8 @@ struct rpc_clnt {
>>>>
>>>> unsigned int cl_softrtry : 1,/* soft timeouts */
>>>> cl_discrtry : 1,/* disconnect before retry */
>>>> - cl_autobind : 1;/* use getport() */
>>>> + cl_autobind : 1,/* use getport() */
>>>> + cl_chatty : 1;/* be verbose */
>>>>
>>>> struct rpc_rtt * cl_rtt; /* RTO estimator data */
>>>> const struct rpc_timeout *cl_timeout; /* Timeout strategy */
>>>> @@ -114,6 +115,7 @@ struct rpc_create_args {
>>>> #define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
>>>> #define RPC_CLNT_CREATE_NOPING (1UL << 4)
>>>> #define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
>>>> +#define RPC_CLNT_CREATE_QUIET (1UL << 6)
>>>>
>>>> struct rpc_clnt *rpc_create(struct rpc_create_args *args);
>>>> struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
>>>> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
>>>> index 8c6a7f1..3aa3348 100644
>>>> --- a/net/sunrpc/clnt.c
>>>> +++ b/net/sunrpc/clnt.c
>>>> @@ -328,6 +328,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
>>>> clnt->cl_autobind = 1;
>>>> if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
>>>> clnt->cl_discrtry = 1;
>>>> + if (args->flags & RPC_CLNT_CREATE_QUIET)
>>>> + clnt->cl_chatty = 0;
>>>>
>>>>
>>> Shouldn't that be
>>> if (!(args->flags & RPC_CLNT_CREATE_QUIET))
>>> clnt->cl_chatty = 1;
>>>
>>> since clnt->cl_chatty is automatically initialised to 0?
>>>
>>>
>> clnt->cl_chatty is automatically initialized to 1.
>>
>
> Where? I couldn't find any other lines that initialise it in this patch.
>
oops. my bad. you are right. it should be as you suggested.
>>>
>>>
>>>>
>>>> return clnt;
>>>> }
>>>> @@ -1160,7 +1162,8 @@ call_timeout(struct rpc_task *task)
>>>> task->tk_timeouts++;
>>>>
>>>> if (RPC_IS_SOFT(task)) {
>>>> - printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
>>>> + if (clnt->cl_chatty)
>>>> + printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
>>>> clnt->cl_protname, clnt->cl_server);
>>>> rpc_exit(task, -EIO);
>>>> return;
>>>>
>>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>
>>>
>>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
>
>