2018-10-26 15:45:32

by Trond Myklebust

[permalink] [raw]
Subject: [GIT PULL] Please pull NFS client changes for Linux 4.20.

Hi Linus,

The following changes since commit 17b57b1883c1285f3d0dc2266e8f79286a7bef38:

Linux 4.19-rc6 (2018-09-30 07:15:35 -0700)

are available in the Git repository at:

git://git.linux-nfs.org/projects/trondmy/linux-nfs.git tags/nfs-for-4.20-1

for you to fetch changes up to 331bc71cb1751d78f6807ad8e6162b07c67cdd1b:

SUNRPC: Convert the auth cred cache to use refcount_t (2018-10-23 12:24:33 -0400)

Cheers
Trond

----------------------------------------------------------------
NFS client updates for Linux 4.20

Highlights include:

Stable fixes:
- Fix the NFSv4.1 r/wsize sanity checking
- Reset the RPC/RDMA credit grant properly after a disconnect
- Fix a missed page unlock after pg_doio()

Features and optimisations:
- Overhaul of the RPC client socket code to eliminate a locking bottleneck
and reduce the latency when transmitting lots of requests in parallel.
- Allow parallelisation of the RPCSEC_GSS encoding of an RPC request.
- Convert the RPC client socket receive code to use iovec_iter() for
improved efficiency.
- Convert several NFS and RPC lookup operations to use RCU instead of
taking global locks.
- Avoid the need for BH-safe locks in the RPC/RDMA back channel.

Bugfixes and cleanups:
- Fix lock recovery during NFSv4 delegation recalls
- Fix the NFSv4 + NFSv4.1 "lookup revalidate + open file" case.
- Fixes for the RPC connection metrics
- Various RPC client layer cleanups to consolidate stream based sockets
- RPC/RDMA connection cleanups
- Simplify the RPC/RDMA cleanup after memory operation failures
- Clean ups for NFS v4.2 copy completion and NFSv4 open state reclaim.

----------------------------------------------------------------
Anna Schumaker (4):
NFS: Split out the body of nfs4_reclaim_open_state()
NFS: Reduce indentation of the switch statement in nfs4_reclaim_open_state()
NFS: Reduce indentation of nfs4_recovery_handle_error()
NFSv4: Split out NFS v4.2 copy completion functions

Arnd Bergmann (1):
SUNRPC: use cmpxchg64() in gss_seq_send64_fetch_and_inc()

Benjamin Coddington (2):
nfs: Fix a missed page unlock after pg_doio()
nfs: remove redundant call to nfs_context_set_write_error()

Chuck Lever (20):
xprtrdma: xprt_release_rqst_cong is called outside of transport_lock
xprtrdma: Reset credit grant properly after a disconnect
xprtrdma: Create more MRs at a time
xprtrdma: Explicitly resetting MRs is no longer necessary
xprtrdma: Name MR trace events consistently
sunrpc: Fix connect metrics
sunrpc: Report connect_time in seconds
xprtrdma: Rename rpcrdma_conn_upcall
xprtrdma: Conventional variable names in rpcrdma_conn_upcall
xprtrdma: Eliminate "connstate" variable from rpcrdma_conn_upcall()
xprtrdma: Re-organize the switch() in rpcrdma_conn_upcall
xprtrdma: Simplify RPC wake-ups on connect
xprtrdma: Rename rpcrdma_qp_async_error_upcall
xprtrdma: Remove memory address of "ep" from an error message
xprtrdma: Don't disable BH's in backchannel server
xprtrdma: Move rb_flags initialization
xprtrdma: Report when there were zero posted Receives
xprtrdma: Add documenting comments
xprtrdma: Clean up xprt_rdma_disconnect_inject
xprtrdma: Squelch a sparse warning

Frank Sorenson (1):
NFS: change sign of nfs_fh length

J. Bruce Fields (1):
sunrpc: safely reallow resvport min/max inversion

Olga Kornievskaia (1):
NFSv4.x: fix lock recovery during delegation recall

Tigran Mkrtchyan (1):
nfs4: flex_file: ignore synthetic uid/gid for tightly coupled DSes

Trond Myklebust (67):
SUNRPC: Clean up initialisation of the struct rpc_rqst
SUNRPC: If there is no reply expected, bail early from call_decode
SUNRPC: The transmitted message must lie in the RPCSEC window of validity
SUNRPC: Simplify identification of when the message send/receive is complete
SUNRPC: Avoid holding locks across the XDR encoding of the RPC message
SUNRPC: Rename TCP receive-specific state variables
SUNRPC: Move reset of TCP state variables into the reconnect code
SUNRPC: Add socket transmit queue offset tracking
SUNRPC: Simplify dealing with aborted partially transmitted messages
SUNRPC: Refactor the transport request pinning
SUNRPC: Add a helper to wake up a sleeping rpc_task and set its status
SUNRPC: Test whether the task is queued before grabbing the queue spinlocks
SUNRPC: Don't wake queued RPC calls multiple times in xprt_transmit
SUNRPC: Rename xprt->recv_lock to xprt->queue_lock
SUNRPC: Refactor xprt_transmit() to remove the reply queue code
SUNRPC: Refactor xprt_transmit() to remove wait for reply code
SUNRPC: Minor cleanup for call_transmit()
SUNRPC: Distinguish between the slot allocation list and receive queue
SUNRPC: Add a transmission queue for RPC requests
SUNRPC: Refactor RPC call encoding
SUNRPC: Fix up the back channel transmit
SUNRPC: Treat the task and request as separate in the xprt_ops->send_request()
SUNRPC: Don't reset the request 'bytes_sent' counter when releasing XPRT_LOCK
SUNRPC: Simplify xprt_prepare_transmit()
SUNRPC: Move RPC retransmission stat counter to xprt_transmit()
SUNRPC: Improve latency for interactive tasks
SUNRPC: Support for congestion control when queuing is enabled
SUNRPC: Enqueue swapper tagged RPCs at the head of the transmit queue
SUNRPC: Allow calls to xprt_transmit() to drain the entire transmit queue
SUNRPC: Allow soft RPC calls to time out when waiting for the XPRT_LOCK
SUNRPC: Turn off throttling of RPC slots for TCP sockets
SUNRPC: Clean up transport write space handling
SUNRPC: Cleanup: remove the unused 'task' argument from the request_send()
SUNRPC: Don't take transport->lock unnecessarily when taking XPRT_LOCK
SUNRPC: Convert xprt receive queue to use an rbtree
SUNRPC: Fix priority queue fairness
SUNRPC: Convert the xprt->sending queue back to an ordinary wait queue
SUNRPC: Add a label for RPC calls that require allocation on receive
SUNRPC: Add a bvec array to struct xdr_buf for use with iovec_iter()
SUNRPC: Simplify TCP receive code by switching to using iterators
SUNRPC: Clean up - rename xs_tcp_data_receive() to xs_stream_data_receive()
SUNRPC: Allow AF_LOCAL sockets to use the generic stream receive
SUNRPC: Clean up xs_udp_data_receive()
SUNRPC: Unexport xdr_partial_copy_from_skb()
pNFS: Don't zero out the array in nfs4_alloc_pages()
pNFS: Don't allocate more pages than we need to fit a layoutget response
NFS: Convert lookups of the lock context to RCU
NFS: Simplify internal check for whether file is open for write
NFS: Convert lookups of the open context to RCU
NFSv4: Convert open state lookup to use RCU
NFSv4: Convert struct nfs4_state to use refcount_t
NFSv4.1: Fix the r/wsize checking
NFSv3: Improve NFSv3 performance when server returns no post-op attributes
NFSv4: Save a few bytes in the nfs_pgio_args/res
NFS: Remove private spinlock in struct nfs_pgio_header
SUNRPC: Remove rpc_authflavor_lock in favour of RCU locking
SUNRPC: Lockless lookup of RPCSEC_GSS mechanisms
SUNRPC: Replace krb5_seq_lock with a lockless scheme
NFS: Fix dentry revalidation on NFSv4 lookup
NFS: Refactor nfs_lookup_revalidate()
NFSv4: Fix lookup revalidate of regular files
SUNRPC: Fix a compile warning for cmpxchg64()
Merge tag 'nfs-rdma-for-4.20-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
SUNRPC: Clean up the AUTH cache code
SUNRPC: Simplify lookup code
SUNRPC: Convert auth creds to use refcount_t
SUNRPC: Convert the auth cred cache to use refcount_t

fs/nfs/delegation.c | 17 +-
fs/nfs/dir.c | 295 ++++----
fs/nfs/filelayout/filelayout.c | 1 +
fs/nfs/flexfilelayout/flexfilelayout.c | 1 +
fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 +-
fs/nfs/inode.c | 70 +-
fs/nfs/nfs3proc.c | 5 +
fs/nfs/nfs3xdr.c | 10 +-
fs/nfs/nfs4_fs.h | 3 +-
fs/nfs/nfs4client.c | 16 +-
fs/nfs/nfs4proc.c | 53 +-
fs/nfs/nfs4state.c | 254 ++++---
fs/nfs/nfs4xdr.c | 2 +-
fs/nfs/pagelist.c | 49 +-
fs/nfs/pnfs.c | 16 +-
fs/nfs/pnfs.h | 1 +
fs/nfs/read.c | 10 +-
include/linux/nfs_fs.h | 2 +
include/linux/nfs_fs_sb.h | 3 +
include/linux/nfs_xdr.h | 28 +-
include/linux/sunrpc/auth.h | 18 +-
include/linux/sunrpc/auth_gss.h | 1 +
include/linux/sunrpc/bc_xprt.h | 1 +
include/linux/sunrpc/gss_krb5.h | 3 +-
include/linux/sunrpc/sched.h | 10 +-
include/linux/sunrpc/svc_xprt.h | 1 -
include/linux/sunrpc/xdr.h | 11 +-
include/linux/sunrpc/xprt.h | 35 +-
include/linux/sunrpc/xprtsock.h | 36 +-
include/trace/events/rpcrdma.h | 18 +-
include/trace/events/sunrpc.h | 37 +-
net/sunrpc/auth.c | 310 ++++----
net/sunrpc/auth_generic.c | 2 +-
net/sunrpc/auth_gss/auth_gss.c | 45 +-
net/sunrpc/auth_gss/gss_krb5_seal.c | 38 +-
net/sunrpc/auth_gss/gss_krb5_wrap.c | 8 +-
net/sunrpc/auth_gss/gss_mech_switch.c | 28 +-
net/sunrpc/auth_gss/gss_rpc_xdr.c | 1 +
net/sunrpc/auth_null.c | 6 +-
net/sunrpc/auth_unix.c | 4 +-
net/sunrpc/backchannel_rqst.c | 1 -
net/sunrpc/clnt.c | 174 +++--
net/sunrpc/sched.c | 178 +++--
net/sunrpc/socklib.c | 10 +-
net/sunrpc/svc_xprt.c | 2 -
net/sunrpc/svcsock.c | 6 +-
net/sunrpc/xdr.c | 34 +
net/sunrpc/xprt.c | 908 ++++++++++++++++-------
net/sunrpc/xprtrdma/backchannel.c | 20 +-
net/sunrpc/xprtrdma/fmr_ops.c | 131 ++--
net/sunrpc/xprtrdma/frwr_ops.c | 137 ++--
net/sunrpc/xprtrdma/rpc_rdma.c | 30 +-
net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 15 +-
net/sunrpc/xprtrdma/transport.c | 120 ++-
net/sunrpc/xprtrdma/verbs.c | 178 ++---
net/sunrpc/xprtrdma/xprt_rdma.h | 18 +-
net/sunrpc/xprtsock.c | 1107 ++++++++++++----------------
57 files changed, 2481 insertions(+), 2039 deletions(-)

--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
[email protected]



2018-10-26 20:10:38

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] Please pull NFS client changes for Linux 4.20.

On Fri, Oct 26, 2018 at 8:45 AM Trond Myklebust <[email protected]> wrote:
>
> NFS client updates for Linux 4.20

Pulled.

Btw, just out of curiosity - is there some pattern to when I get the
pull requests from you vs Anna? Or is it just "whoever happens to have
the baton"? Not that it matters, but I was wondering if there was some
logic to it that I've missed..

Linus

2018-10-26 20:21:00

by Trond Myklebust

[permalink] [raw]
Subject: Re: [GIT PULL] Please pull NFS client changes for Linux 4.20.

On Fri, 2018-10-26 at 13:10 -0700, Linus Torvalds wrote:
> On Fri, Oct 26, 2018 at 8:45 AM Trond Myklebust <
> [email protected]> wrote:
> >
> > NFS client updates for Linux 4.20
>
> Pulled.

Thank you!

> Btw, just out of curiosity - is there some pattern to when I get the
> pull requests from you vs Anna? Or is it just "whoever happens to
> have
> the baton"? Not that it matters, but I was wondering if there was
> some
> logic to it that I've missed..

We agreed about a year or so ago to take turns maintaining the linux-
next branches. So in practice that means Anna has been sending you the
pull requests for the odd kernel minor numbers, and I've been sending
you the ones for the even numbers.
We still share the burden of reviewing the code, though, so if
something slips through the cracks, we get to share the blame... ☺

Cheers
Trond

--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
[email protected]


2018-10-26 20:25:24

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] Please pull NFS client changes for Linux 4.20.

On Fri, Oct 26, 2018 at 1:21 PM Trond Myklebust <[email protected]> wrote:
>
> We agreed about a year or so ago to take turns maintaining the linux-
> next branches.

Heh. That was a simpler pattern than I thought. It was just hidden by
the fact that there are sometimes more than one pull request during
the merge window, and then a variable number of "fixes" pull requests
during the rc's..

But now that you mention it I can see that yeah, it just alternates by
releases..

Linus