Merge tag 'nfs-for-4.8-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client bugfixes from Trond Myklebust: "Highlights include: - Stable patch from Olga to fix RPCSEC_GSS upcalls when the same user needs multiple different security services (e.g. krb5i and krb5p). - Stable patch to fix a regression introduced by the use of SO_REUSEPORT, and that prevented the use of multiple different NFS versions to the same server. - TCP socket reconnection timer fixes. - Patch from Neil to disable the use of IPv6 temporary addresses" * tag 'nfs-for-4.8-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: NFSv4: Cap the transport reconnection timer at 1/2 lease period NFSv4: Cleanup the setting of the nfs4 lease period SUNRPC: Limit the reconnect backoff timer to the max RPC message timeout SUNRPC: Fix reconnection timeouts NFSv4.2: LAYOUTSTATS may return NFS4ERR_ADMIN/DELEG_REVOKED SUNRPC: disable the use of IPv6 temporary addresses. SUNRPC: allow for upcalls for same uid but different gss service SUNRPC: Fix up socket autodisconnect SUNRPC: Handle EADDRNOTAVAIL on connection failures
This commit is contained in:
@@ -340,12 +340,14 @@ gss_release_msg(struct gss_upcall_msg *gss_msg)
|
||||
}
|
||||
|
||||
static struct gss_upcall_msg *
|
||||
__gss_find_upcall(struct rpc_pipe *pipe, kuid_t uid)
|
||||
__gss_find_upcall(struct rpc_pipe *pipe, kuid_t uid, const struct gss_auth *auth)
|
||||
{
|
||||
struct gss_upcall_msg *pos;
|
||||
list_for_each_entry(pos, &pipe->in_downcall, list) {
|
||||
if (!uid_eq(pos->uid, uid))
|
||||
continue;
|
||||
if (auth && pos->auth->service != auth->service)
|
||||
continue;
|
||||
atomic_inc(&pos->count);
|
||||
dprintk("RPC: %s found msg %p\n", __func__, pos);
|
||||
return pos;
|
||||
@@ -365,7 +367,7 @@ gss_add_msg(struct gss_upcall_msg *gss_msg)
|
||||
struct gss_upcall_msg *old;
|
||||
|
||||
spin_lock(&pipe->lock);
|
||||
old = __gss_find_upcall(pipe, gss_msg->uid);
|
||||
old = __gss_find_upcall(pipe, gss_msg->uid, gss_msg->auth);
|
||||
if (old == NULL) {
|
||||
atomic_inc(&gss_msg->count);
|
||||
list_add(&gss_msg->list, &pipe->in_downcall);
|
||||
@@ -714,7 +716,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
|
||||
err = -ENOENT;
|
||||
/* Find a matching upcall */
|
||||
spin_lock(&pipe->lock);
|
||||
gss_msg = __gss_find_upcall(pipe, uid);
|
||||
gss_msg = __gss_find_upcall(pipe, uid, NULL);
|
||||
if (gss_msg == NULL) {
|
||||
spin_unlock(&pipe->lock);
|
||||
goto err_put_ctx;
|
||||
|
Reference in New Issue
Block a user