diff options
author | Andreas Gruenbacher <agruen@suse.de> | 2005-06-22 13:16:23 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-06-22 16:07:17 -0400 |
commit | cdf477068e6db0c3e19df96f46abb85202de138c (patch) | |
tree | 12381ecf664f91c62e2dedc72f57827347c5f5dd | |
parent | 6a19275ada9137435da58990c8f8d3f58e170bf1 (diff) |
[PATCH] RPC: Return -EPFNOSUPPORT for RPC programs that are unavailable
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Olaf Kirch <okir@suse.de>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | net/sunrpc/clnt.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 9da1deb482e2..33f12b84e265 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -1021,10 +1021,11 @@ call_verify(struct rpc_task *task) | |||
1021 | case RPC_AUTH_ERROR: | 1021 | case RPC_AUTH_ERROR: |
1022 | break; | 1022 | break; |
1023 | case RPC_MISMATCH: | 1023 | case RPC_MISMATCH: |
1024 | printk(KERN_WARNING "%s: RPC call version mismatch!\n", __FUNCTION__); | 1024 | dprintk("%s: RPC call version mismatch!\n", __FUNCTION__); |
1025 | goto out_eio; | 1025 | error = -EPROTONOSUPPORT; |
1026 | goto out_err; | ||
1026 | default: | 1027 | default: |
1027 | printk(KERN_WARNING "%s: RPC call rejected, unknown error: %x\n", __FUNCTION__, n); | 1028 | dprintk("%s: RPC call rejected, unknown error: %x\n", __FUNCTION__, n); |
1028 | goto out_eio; | 1029 | goto out_eio; |
1029 | } | 1030 | } |
1030 | if (--len < 0) | 1031 | if (--len < 0) |
@@ -1075,23 +1076,26 @@ call_verify(struct rpc_task *task) | |||
1075 | case RPC_SUCCESS: | 1076 | case RPC_SUCCESS: |
1076 | return p; | 1077 | return p; |
1077 | case RPC_PROG_UNAVAIL: | 1078 | case RPC_PROG_UNAVAIL: |
1078 | printk(KERN_WARNING "RPC: call_verify: program %u is unsupported by server %s\n", | 1079 | dprintk("RPC: call_verify: program %u is unsupported by server %s\n", |
1079 | (unsigned int)task->tk_client->cl_prog, | 1080 | (unsigned int)task->tk_client->cl_prog, |
1080 | task->tk_client->cl_server); | 1081 | task->tk_client->cl_server); |
1081 | goto out_eio; | 1082 | error = -EPFNOSUPPORT; |
1083 | goto out_err; | ||
1082 | case RPC_PROG_MISMATCH: | 1084 | case RPC_PROG_MISMATCH: |
1083 | printk(KERN_WARNING "RPC: call_verify: program %u, version %u unsupported by server %s\n", | 1085 | dprintk("RPC: call_verify: program %u, version %u unsupported by server %s\n", |
1084 | (unsigned int)task->tk_client->cl_prog, | 1086 | (unsigned int)task->tk_client->cl_prog, |
1085 | (unsigned int)task->tk_client->cl_vers, | 1087 | (unsigned int)task->tk_client->cl_vers, |
1086 | task->tk_client->cl_server); | 1088 | task->tk_client->cl_server); |
1087 | goto out_eio; | 1089 | error = -EPROTONOSUPPORT; |
1090 | goto out_err; | ||
1088 | case RPC_PROC_UNAVAIL: | 1091 | case RPC_PROC_UNAVAIL: |
1089 | printk(KERN_WARNING "RPC: call_verify: proc %p unsupported by program %u, version %u on server %s\n", | 1092 | dprintk("RPC: call_verify: proc %p unsupported by program %u, version %u on server %s\n", |
1090 | task->tk_msg.rpc_proc, | 1093 | task->tk_msg.rpc_proc, |
1091 | task->tk_client->cl_prog, | 1094 | task->tk_client->cl_prog, |
1092 | task->tk_client->cl_vers, | 1095 | task->tk_client->cl_vers, |
1093 | task->tk_client->cl_server); | 1096 | task->tk_client->cl_server); |
1094 | goto out_eio; | 1097 | error = -EOPNOTSUPP; |
1098 | goto out_err; | ||
1095 | case RPC_GARBAGE_ARGS: | 1099 | case RPC_GARBAGE_ARGS: |
1096 | dprintk("RPC: %4d %s: server saw garbage\n", task->tk_pid, __FUNCTION__); | 1100 | dprintk("RPC: %4d %s: server saw garbage\n", task->tk_pid, __FUNCTION__); |
1097 | break; /* retry */ | 1101 | break; /* retry */ |
@@ -1104,7 +1108,7 @@ out_retry: | |||
1104 | task->tk_client->cl_stats->rpcgarbage++; | 1108 | task->tk_client->cl_stats->rpcgarbage++; |
1105 | if (task->tk_garb_retry) { | 1109 | if (task->tk_garb_retry) { |
1106 | task->tk_garb_retry--; | 1110 | task->tk_garb_retry--; |
1107 | dprintk(KERN_WARNING "RPC %s: retrying %4d\n", __FUNCTION__, task->tk_pid); | 1111 | dprintk("RPC %s: retrying %4d\n", __FUNCTION__, task->tk_pid); |
1108 | task->tk_action = call_bind; | 1112 | task->tk_action = call_bind; |
1109 | return NULL; | 1113 | return NULL; |
1110 | } | 1114 | } |