]> err.no Git - linux-2.6/commitdiff
sunrpc: gss_pipe_downcall(), don't assume all errors are transient
authorKevin Coffman <kwc@citi.umich.edu>
Fri, 9 Nov 2007 23:42:04 +0000 (18:42 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 17 Nov 2007 18:08:45 +0000 (13:08 -0500)
Instead of mapping all errors except EACCES to EAGAIN, map all errors
except EAGAIN to EACCES.

An example is user-land negotiating a Kerberos context with an encryption
type that is not supported by the kernel code.  (This can happen due to
mis-configuration or a bug in the Kerberos code that does not honor our
request to limit the encryption types negotiated.)  This failure is not
transient, and returning EAGAIN causes mount to continuously retry rather
than giving up.

Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/auth_gss/auth_gss.c

index 53995af9ca4b0f3b64708f59025528172ee80d4b..c42362c339447d71c14d9163bfa719dcd20c9d0a 100644 (file)
@@ -540,7 +540,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
        p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
        if (IS_ERR(p)) {
                err = PTR_ERR(p);
-               gss_msg->msg.errno = (err == -EACCES) ? -EACCES : -EAGAIN;
+               gss_msg->msg.errno = (err == -EAGAIN) ? -EAGAIN : -EACCES;
                goto err_release_msg;
        }
        gss_msg->ctx = gss_get_ctx(ctx);