diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-11 20:14:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-11 20:14:54 -0500 |
commit | 6f83e5bd3e96228ee0caff0b103addb5f4e95459 (patch) | |
tree | bf27fcc754ea8c5287088df2803edbfb3c70f716 /net/sunrpc/sched.c | |
parent | 73b4f63aebd6d57db4ca1d31fa6f8516651207b0 (diff) | |
parent | c627d31ba0696cbd829437af2be2f2dee3546b1e (diff) |
Merge tag 'nfs-for-3.20-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights incluse:
Features:
- Removing the forced serialisation of open()/close() calls in
NFSv4.x (x>0) makes for a significant performance improvement in
metadata intensive workloads.
- Full support for the pNFS "flexible files" layout type
- Further RPC/RDMA client improvements from Chuck
Bugfixes:
- Stable fix: NFSv4.1 backchannel calls blocking operations with !TASK_RUNNING
- Stable fix: pnfs_generic_pg_init_read/write can be called with lseg == NULL
- Stable fix: Fix an Oopsable condition when nsm_mon_unmon is called
as part of the namespace cleanup,
- Stable fix: Ensure we reference the inode for return-on-close in
delegreturn
- Use SO_REUSEPORT to ensure that NFSv3 TCP connections can rebind to
the same source address/port combination during a disconnect/
reconnect event. This is a requirement imposed by most NFSv3
server duplicate reply cache implementations.
Optimisations:
- Ask for no NFSv4.1 delegations on OPEN if using O_DIRECT
Other:
- Add Anna Schumaker as co-maintainer for the NFS client"
* tag 'nfs-for-3.20-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (119 commits)
SUNRPC: Cleanup to remove xs_tcp_close()
pnfs: delete an unintended goto
pnfs/flexfiles: Do not dprintk after the free
SUNRPC: Fix stupid typo in xs_sock_set_reuseport
SUNRPC: Define xs_tcp_fin_timeout only if CONFIG_SUNRPC_DEBUG
SUNRPC: Handle connection reset more efficiently.
SUNRPC: Remove the redundant XPRT_CONNECTION_CLOSE flag
SUNRPC: Make xs_tcp_close() do a socket shutdown rather than a sock_release
SUNRPC: Ensure xs_tcp_shutdown() requests a full close of the connection
SUNRPC: Cleanup to remove remaining uses of XPRT_CONNECTION_ABORT
SUNRPC: Remove TCP socket linger code
SUNRPC: Remove TCP client connection reset hack
SUNRPC: TCP/UDP always close the old socket before reconnecting
SUNRPC: Add helpers to prevent socket create from racing
SUNRPC: Ensure xs_reset_transport() resets the close connection flags
SUNRPC: Do not clear the source port in xs_reset_transport
SUNRPC: Handle EADDRINUSE on connect
SUNRPC: Set SO_REUSEPORT socket option for TCP connections
NFSv4.1: Fix pnfs_put_lseg races
NFSv4.1: pnfs_send_layoutreturn should use GFP_NOFS
...
Diffstat (limited to 'net/sunrpc/sched.c')
-rw-r--r-- | net/sunrpc/sched.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index d20f2329eea3..b91fd9c597b4 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -844,10 +844,10 @@ static void rpc_async_schedule(struct work_struct *work) | |||
844 | void *rpc_malloc(struct rpc_task *task, size_t size) | 844 | void *rpc_malloc(struct rpc_task *task, size_t size) |
845 | { | 845 | { |
846 | struct rpc_buffer *buf; | 846 | struct rpc_buffer *buf; |
847 | gfp_t gfp = GFP_NOWAIT | __GFP_NOWARN; | 847 | gfp_t gfp = GFP_NOIO | __GFP_NOWARN; |
848 | 848 | ||
849 | if (RPC_IS_SWAPPER(task)) | 849 | if (RPC_IS_SWAPPER(task)) |
850 | gfp |= __GFP_MEMALLOC; | 850 | gfp = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN; |
851 | 851 | ||
852 | size += sizeof(struct rpc_buffer); | 852 | size += sizeof(struct rpc_buffer); |
853 | if (size <= RPC_BUFFER_MAXSIZE) | 853 | if (size <= RPC_BUFFER_MAXSIZE) |
@@ -1069,7 +1069,8 @@ static int rpciod_start(void) | |||
1069 | * Create the rpciod thread and wait for it to start. | 1069 | * Create the rpciod thread and wait for it to start. |
1070 | */ | 1070 | */ |
1071 | dprintk("RPC: creating workqueue rpciod\n"); | 1071 | dprintk("RPC: creating workqueue rpciod\n"); |
1072 | wq = alloc_workqueue("rpciod", WQ_MEM_RECLAIM, 1); | 1072 | /* Note: highpri because network receive is latency sensitive */ |
1073 | wq = alloc_workqueue("rpciod", WQ_MEM_RECLAIM | WQ_HIGHPRI, 0); | ||
1073 | rpciod_workqueue = wq; | 1074 | rpciod_workqueue = wq; |
1074 | return rpciod_workqueue != NULL; | 1075 | return rpciod_workqueue != NULL; |
1075 | } | 1076 | } |