On Fri, 22 Jun 2012 15:31:06 +0100 Mel Gorman <mgorman@xxxxxxx> wrote: > Implement the new swapfile a_ops for NFS and hook up ->direct_IO. This > will set the NFS socket to SOCK_MEMALLOC and run socket reconnect > under PF_MEMALLOC as well as reset SOCK_MEMALLOC before engaging the > protocol ->connect() method. > > PF_MEMALLOC should allow the allocation of struct socket and related > objects and the early (re)setting of SOCK_MEMALLOC should allow us > to receive the packets required for the TCP connection buildup. > > [dfeng@xxxxxxxxxx: Fix handling of multiple swap files] > [a.p.zijlstra@xxxxxxxxx: Original patch] > Signed-off-by: Mel Gorman <mgorman@xxxxxxx> > Acked-by: Rik van Riel <riel@xxxxxxxxxx> > --- > fs/nfs/Kconfig | 8 +++++ > fs/nfs/direct.c | 82 ++++++++++++++++++++++++++++--------------- > fs/nfs/file.c | 22 ++++++++++-- > include/linux/nfs_fs.h | 4 +-- > include/linux/sunrpc/xprt.h | 3 ++ > net/sunrpc/Kconfig | 5 +++ > net/sunrpc/clnt.c | 2 ++ > net/sunrpc/sched.c | 7 ++-- > net/sunrpc/xprtsock.c | 53 ++++++++++++++++++++++++++++ > 9 files changed, 152 insertions(+), 34 deletions(-) > [...snip...] > @@ -2108,11 +2156,15 @@ static void xs_tcp_setup_socket(struct work_struct *work) > container_of(work, struct sock_xprt, connect_worker.work); > struct socket *sock = transport->sock; > struct rpc_xprt *xprt = &transport->xprt; > + unsigned long pflags = current->flags; > int status = -EIO; > > if (xprt->shutdown) > goto out; > > + if (xprt->swapper) > + current->flags |= PF_MEMALLOC; > + > if (!sock) { > clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); > sock = xs_create_sock(xprt, transport, > @@ -2174,6 +2226,7 @@ out_eagain: > out: > xprt_clear_connecting(xprt); > xprt_wake_pending_tasks(xprt, status); > + tsk_restore_flags(current, pflags, PF_MEMALLOC); > } > > /** Apologies if this is fixed in another patch and I didn't see it... There's a place in the above function that returns without going through "out:". I think you also want to tsk_restore_flags() in that spot too. -- Jeff Layton <jlayton@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html