2004-04-26 10:48:39

by Andreas Gruenbacher

[permalink] [raw]
Subject: [PATCH 1/11] sunrpc-enosys-when-unavail

Differentiate between program/procedure not available and other errors

Andreas Gruenbacher <[email protected]>, SUSE Labs

Index: linux-2.6.6-rc2/net/sunrpc/clnt.c
===================================================================
--- linux-2.6.6-rc2.orig/net/sunrpc/clnt.c
+++ linux-2.6.6-rc2/net/sunrpc/clnt.c
@@ -1018,23 +1018,28 @@ call_verify(struct rpc_task *task)
case RPC_SUCCESS:
return p;
case RPC_PROG_UNAVAIL:
- printk(KERN_WARNING "RPC: call_verify: program %u is unsupported by server %s\n",
+ if (task->tk_client->cl_prog != 100227) {
+ printk(KERN_WARNING "RPC: call_verify: program %u is unsupported by server %s\n",
(unsigned int)task->tk_client->cl_prog,
task->tk_client->cl_server);
- goto out_eio;
+ }
+ rpc_exit(task, -ENOSYS);
+ return NULL;
case RPC_PROG_MISMATCH:
printk(KERN_WARNING "RPC: call_verify: program %u, version %u unsupported by server %s\n",
(unsigned int)task->tk_client->cl_prog,
(unsigned int)task->tk_client->cl_vers,
task->tk_client->cl_server);
- goto out_eio;
+ rpc_exit(task, -ENOSYS);
+ return NULL;
case RPC_PROC_UNAVAIL:
printk(KERN_WARNING "RPC: call_verify: proc %p unsupported by program %u, version %u on server %s\n",
task->tk_msg.rpc_proc,
task->tk_client->cl_prog,
task->tk_client->cl_vers,
task->tk_client->cl_server);
- goto out_eio;
+ rpc_exit(task, -ENOSYS);
+ return NULL;
case RPC_GARBAGE_ARGS:
break; /* retry */
default:


2004-04-26 20:33:45

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH 1/11] sunrpc-enosys-when-unavail

On Mon, 2004-04-26 at 06:28, Andreas Gruenbacher wrote:
> Differentiate between program/procedure not available and other errors
>

Sorry. This one is unacceptable. I will NOT have program numbers hard
coded into sunrpc. There should be no reason to do this at all...

Cheers,
Trond

2004-04-27 13:38:11

by Andreas Gruenbacher

[permalink] [raw]
Subject: Re: [PATCH 1/11] sunrpc-enosys-when-unavail

Hello,

net/sunrpc/svc.c has a similar check already to prevent syslog flooding
for such common error conditions:

[] #ifdef RPC_PARANOIA
[] if (prog != 100227 || progp->pg_prog != 100003)
[] printk("svc: unknown program %d (me %d)\n", prog, progp->pg_prog);
[] /* else it is just a Solaris client seeing if ACLs are supported */
[] #endif

We could also get rid of the printk's in net/sunrpc/clnt.c -- your/Neil's call.

On Mon, 2004-04-26 at 22:33, Trond Myklebust wrote:
> On Mon, 2004-04-26 at 06:28, Andreas Gruenbacher wrote:
> > Differentiate between program/procedure not available and other errors
> >
>
> Sorry. This one is unacceptable. I will NOT have program numbers hard
> coded into sunrpc. There should be no reason to do this at all...
>
> Cheers,
> Trond
--
Andreas Gruenbacher <[email protected]>
SUSE Labs, SUSE LINUX AG