Merge tag 'nfs-for-3.6-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull second wave of NFS client updates from Trond Myklebust: - Patches from Bryan to allow splitting of the NFSv2/v3/v4 code into separate modules. - Fix Oopses in the NFSv4 idmapper - Fix a deadlock whereby rpciod tries to allocate a new socket and ends up recursing into the NFS code due to memory reclaim. - Increase the number of permitted callback connections. * tag 'nfs-for-3.6-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: nfs: explicitly reject LOCK_MAND flock() requests nfs: increase number of permitted callback connections. SUNRPC: return negative value in case rpcbind client creation error NFS: Convert v4 into a module NFS: Convert v3 into a module NFS: Convert v2 into a module NFS: Keep module parameters in the generic NFS client NFS: Split out remaining NFS v4 inode functions NFS: Pass super operations and xattr handlers in the nfs_subversion NFS: Only initialize the ACL client in the v3 case NFS: Create a try_mount rpc op NFS: Remove the NFS v4 xdev mount function NFS: Add version registering framework NFS: Fix a number of bugs in the idmapper nfs: skip commit in releasepage if we're freeing memory for fs-related reasons sunrpc: clarify comments on rpc_make_runnable pnfsblock: bail out partial page IO
This commit is contained in:
@@ -251,7 +251,7 @@ static int rpcb_create_local_unix(struct net *net)
|
||||
if (IS_ERR(clnt)) {
|
||||
dprintk("RPC: failed to create AF_LOCAL rpcbind "
|
||||
"client (errno %ld).\n", PTR_ERR(clnt));
|
||||
result = -PTR_ERR(clnt);
|
||||
result = PTR_ERR(clnt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -298,7 +298,7 @@ static int rpcb_create_local_net(struct net *net)
|
||||
if (IS_ERR(clnt)) {
|
||||
dprintk("RPC: failed to create local rpcbind "
|
||||
"client (errno %ld).\n", PTR_ERR(clnt));
|
||||
result = -PTR_ERR(clnt);
|
||||
result = PTR_ERR(clnt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@@ -300,8 +300,9 @@ EXPORT_SYMBOL_GPL(__rpc_wait_for_completion_task);
|
||||
/*
|
||||
* Make an RPC task runnable.
|
||||
*
|
||||
* Note: If the task is ASYNC, this must be called with
|
||||
* the spinlock held to protect the wait queue operation.
|
||||
* Note: If the task is ASYNC, and is being made runnable after sitting on an
|
||||
* rpc_wait_queue, this must be called with the queue spinlock held to protect
|
||||
* the wait queue operation.
|
||||
*/
|
||||
static void rpc_make_runnable(struct rpc_task *task)
|
||||
{
|
||||
@@ -790,7 +791,9 @@ void rpc_execute(struct rpc_task *task)
|
||||
|
||||
static void rpc_async_schedule(struct work_struct *work)
|
||||
{
|
||||
current->flags |= PF_FSTRANS;
|
||||
__rpc_execute(container_of(work, struct rpc_task, u.tk_work));
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -200,6 +200,7 @@ xprt_rdma_connect_worker(struct work_struct *work)
|
||||
int rc = 0;
|
||||
|
||||
if (!xprt->shutdown) {
|
||||
current->flags |= PF_FSTRANS;
|
||||
xprt_clear_connected(xprt);
|
||||
|
||||
dprintk("RPC: %s: %sconnect\n", __func__,
|
||||
@@ -212,10 +213,10 @@ xprt_rdma_connect_worker(struct work_struct *work)
|
||||
|
||||
out:
|
||||
xprt_wake_pending_tasks(xprt, rc);
|
||||
|
||||
out_clear:
|
||||
dprintk("RPC: %s: exit\n", __func__);
|
||||
xprt_clear_connecting(xprt);
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1892,6 +1892,8 @@ static void xs_local_setup_socket(struct work_struct *work)
|
||||
if (xprt->shutdown)
|
||||
goto out;
|
||||
|
||||
current->flags |= PF_FSTRANS;
|
||||
|
||||
clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
||||
status = __sock_create(xprt->xprt_net, AF_LOCAL,
|
||||
SOCK_STREAM, 0, &sock, 1);
|
||||
@@ -1925,6 +1927,7 @@ static void xs_local_setup_socket(struct work_struct *work)
|
||||
out:
|
||||
xprt_clear_connecting(xprt);
|
||||
xprt_wake_pending_tasks(xprt, status);
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
}
|
||||
|
||||
static void xs_udp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
|
||||
@@ -1967,6 +1970,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
||||
if (xprt->shutdown)
|
||||
goto out;
|
||||
|
||||
current->flags |= PF_FSTRANS;
|
||||
|
||||
/* Start by resetting any existing state */
|
||||
xs_reset_transport(transport);
|
||||
sock = xs_create_sock(xprt, transport,
|
||||
@@ -1985,6 +1990,7 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
||||
out:
|
||||
xprt_clear_connecting(xprt);
|
||||
xprt_wake_pending_tasks(xprt, status);
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2110,6 +2116,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
||||
if (xprt->shutdown)
|
||||
goto out;
|
||||
|
||||
current->flags |= PF_FSTRANS;
|
||||
|
||||
if (!sock) {
|
||||
clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
||||
sock = xs_create_sock(xprt, transport,
|
||||
@@ -2159,6 +2167,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
||||
case -EINPROGRESS:
|
||||
case -EALREADY:
|
||||
xprt_clear_connecting(xprt);
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
return;
|
||||
case -EINVAL:
|
||||
/* Happens, for instance, if the user specified a link
|
||||
@@ -2171,6 +2180,7 @@ out_eagain:
|
||||
out:
|
||||
xprt_clear_connecting(xprt);
|
||||
xprt_wake_pending_tasks(xprt, status);
|
||||
current->flags &= ~PF_FSTRANS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user