Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=906462af4c707ba0238f3579fdb2b594c4ea29c3
Commit:     906462af4c707ba0238f3579fdb2b594c4ea29c3
Parent:     2429cbf6a1566b8e92436d615387e4250feab46b
Author:     Chuck Lever <[EMAIL PROTECTED]>
AuthorDate: Tue Sep 11 18:00:47 2007 -0400
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 17:16:56 2007 -0400

    SUNRPC: Split another new rpcbind retry error code from EACCES
    
    Add more new error code processing to the kernel's rpcbind client
    and to call_bind_status() to distinguish two cases:
    
    Case 1: the remote has replied that the program/version tuple is not
    registered (returns EACCES)
    
    Case 2: retry with a lesser rpcbind version (rpcb now returns EPFNOSUPPORT)
    
    This change allows more specific error processing for each of these two
    cases.  We now fail case 2 instead of retrying... it's a server
    configuration error not to support even rpcbind version 2.  And don't
    expose this new error code to user land -- convert it to EIO before
    failing the RPC.
    
    Signed-off-by: Chuck Lever <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 net/sunrpc/clnt.c      |    4 ++--
 net/sunrpc/rpcb_clnt.c |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index e53d718..04f6e15 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -940,7 +940,7 @@ call_bind(struct rpc_task *task)
 static void
 call_bind_status(struct rpc_task *task)
 {
-       int status = -EACCES;
+       int status = -EIO;
 
        if (task->tk_status >= 0) {
                dprint_status(task);
@@ -966,6 +966,7 @@ call_bind_status(struct rpc_task *task)
                                task->tk_pid);
                goto retry_timeout;
        case -EPFNOSUPPORT:
+               /* server doesn't support any rpcbind version we know of */
                dprintk("RPC: %5u remote rpcbind service unavailable\n",
                                task->tk_pid);
                break;
@@ -978,7 +979,6 @@ call_bind_status(struct rpc_task *task)
        default:
                dprintk("RPC: %5u unrecognized rpcbind error (%d)\n",
                                task->tk_pid, -task->tk_status);
-               status = -EIO;
        }
 
        rpc_exit(task, status);
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 9b06a21..d7b9f02 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -377,7 +377,7 @@ void rpcb_getport_async(struct rpc_task *task)
        }
        if (info[xprt->bind_index].rpc_proc == NULL) {
                xprt->bind_index = 0;
-               status = -EACCES;       /* tell caller to try again later */
+               status = -EPFNOSUPPORT;
                dprintk("RPC: %5u %s: no more getport versions available\n",
                        task->tk_pid, __FUNCTION__);
                goto bailout_nofree;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to