On Mon, Dec 14, 2020 at 03:41:13PM -0500, Chuck Lever wrote: > Hi Linus- > > Seasons greetings. tl;dr: > > The following changes since commit b65054597872ce3aefbc6a666385eabdf9e288da: > > Linux 5.10-rc6 (2020-11-29 15:50:50 -0800) > > are available in the Git repository at: > > git://git.linux-nfs.org/projects/cel/cel-2.6.git tags/nfsd-5.11 > > for you to fetch changes up to 716a8bc7f706eeef80ab42c99d9f210eda845c81: > > nfsd: Record NFSv4 pre/post-op attributes as non-atomic (2020-12-09 09:39:38 -0500) > > ---------------------------------------------------------------- > > Several substantial changes this time around. > > + Previously, exporting an NFS mount via NFSD was considered to be > an unsupported feature. With v5.11, the community has attempted > to make re-exporting a first-class feature of NFSD. To be clear: this is work in progress. I've been keeping notes at https://wiki.linux-nfs.org/wiki/index.php/NFS_re-export Remaining issues include reboot recovery, filehandle size limits, and an unidentified crash in the nfsd file locking code. --b. > This would > enable the Linux in-kernel NFS server to be used as an intermediate > cache for a remotely-located primary NFS server, for example, even > with other NFS server implementations, like a NetApp filer, as the > primary. > > + A short series of patches brings support for multiple RPC/RDMA > data chunks per RPC transaction to the Linux NFS server's RPC/RDMA > transport implementation. This is a part of the RPC/RDMA spec that > the other premiere NFS/RDMA implementation (Solaris) has had for a > very long time, and completes the implementation of RPC/RDMA > version 1 in the Linux kernel's NFS server. > > + Long ago, NFSv4 support was introduced to NFSD using a series of > C macros that hid dprintk's and goto's. Over time, the kernel's > XDR implementation has been greatly improved, but these C macros > have remained and become fallow. A series of patches in this pull > request completely replaces those macros with the use of current > kernel XDR infrastructure. Benefits include: > > - More robust input sanitization in NFSD's NFSv4 XDR decoders. > - Make it easier to use common kernel library functions that use > XDR stream APIs (for example, GSS-API). > - Align the structure of the source code with the RFCs so it is > easier to learn, verify, and maintain our XDR implementation. > - Removal of more than a hundred hidden dprintk() call sites. > - Removal of some explicit manipulation of pages to help make the > eventual transition to xdr->bvec smoother. > > + On top of several related fixes in 5.10-rc, there are a few more > fixes to get the Linux NFSD implementation of NFSv4.2 inter-server > copy up to speed. > > And as usual, there is a pinch of seasoning in the form of a > collection of unrelated minor bug fixes and clean-ups. > > Many thanks to all who contributed this time around! > > ---------------------------------------------------------------- > Alex Shi (1): > nfsd/nfs3: remove unused macro nfsd3_fhandleres > > Cheng Lin (1): > nfs_common: need lock during iterate through the list > > Chuck Lever (112): > svcrdma: Catch another Reply chunk overflow case > SUNRPC: Adjust synopsis of xdr_buf_subsegment() > svcrdma: Const-ify the xdr_buf arguments > svcrdma: Refactor the RDMA Write path > SUNRPC: Rename svc_encode_read_payload() > NFSD: Invoke svc_encode_result_payload() in "read" NFSD encoders > svcrdma: Post RDMA Writes while XDR encoding replies > svcrdma: Clean up svc_rdma_encode_reply_chunk() > svcrdma: Add a "parsed chunk list" data structure > svcrdma: Use parsed chunk lists to derive the inv_rkey > svcrdma: Use parsed chunk lists to detect reverse direction replies > svcrdma: Use parsed chunk lists to construct RDMA Writes > svcrdma: Use parsed chunk lists to encode Reply transport headers > svcrdma: Support multiple write chunks when pulling up > svcrdma: Support multiple Write chunks in svc_rdma_map_reply_msg() > svcrdma: Support multiple Write chunks in svc_rdma_send_reply_chunk > svcrdma: Remove chunk list pointers > svcrdma: Clean up chunk tracepoints > svcrdma: Rename info::ri_chunklen > svcrdma: Use the new parsed chunk list when pulling Read chunks > svcrdma: support multiple Read chunks per RPC > SUNRPC: Move the svc_xdr_recvfrom() tracepoint > NFSD: Clean up the show_nf_may macro > NFSD: Remove extra "0x" in tracepoint format specifier > NFSD: Add SPDX header for fs/nfsd/trace.c > SUNRPC: Add xdr_set_scratch_page() and xdr_reset_scratch_buffer() > SUNRPC: Prepare for xdr_stream-style decoding on the server-side > NFSD: Add common helpers to decode void args and encode void results > NFSD: Add tracepoints in nfsd_dispatch() > NFSD: Add tracepoints in nfsd4_decode/encode_compound() > NFSD: Replace the internals of the READ_BUF() macro > NFSD: Replace READ* macros in nfsd4_decode_access() > NFSD: Replace READ* macros in nfsd4_decode_close() > NFSD: Replace READ* macros in nfsd4_decode_commit() > NFSD: Change the way the expected length of a fattr4 is checked > NFSD: Replace READ* macros that decode the fattr4 size attribute > NFSD: Replace READ* macros that decode the fattr4 acl attribute > NFSD: Replace READ* macros that decode the fattr4 mode attribute > NFSD: Replace READ* macros that decode the fattr4 owner attribute > NFSD: Replace READ* macros that decode the fattr4 owner_group attribute > NFSD: Replace READ* macros that decode the fattr4 time_set attributes > NFSD: Replace READ* macros that decode the fattr4 security label attribute > NFSD: Replace READ* macros that decode the fattr4 umask attribute > NFSD: Replace READ* macros in nfsd4_decode_fattr() > NFSD: Replace READ* macros in nfsd4_decode_create() > NFSD: Replace READ* macros in nfsd4_decode_delegreturn() > NFSD: Replace READ* macros in nfsd4_decode_getattr() > NFSD: Replace READ* macros in nfsd4_decode_link() > NFSD: Relocate nfsd4_decode_opaque() > NFSD: Add helpers to decode a clientid4 and an NFSv4 state owner > NFSD: Add helper for decoding locker4 > NFSD: Replace READ* macros in nfsd4_decode_lock() > NFSD: Replace READ* macros in nfsd4_decode_lockt() > NFSD: Replace READ* macros in nfsd4_decode_locku() > NFSD: Replace READ* macros in nfsd4_decode_lookup() > NFSD: Add helper to decode NFSv4 verifiers > NFSD: Add helper to decode OPEN's createhow4 argument > NFSD: Add helper to decode OPEN's openflag4 argument > NFSD: Replace READ* macros in nfsd4_decode_share_access() > NFSD: Replace READ* macros in nfsd4_decode_share_deny() > NFSD: Add helper to decode OPEN's open_claim4 argument > NFSD: Replace READ* macros in nfsd4_decode_open() > NFSD: Replace READ* macros in nfsd4_decode_open_confirm() > NFSD: Replace READ* macros in nfsd4_decode_open_downgrade() > NFSD: Replace READ* macros in nfsd4_decode_putfh() > NFSD: Replace READ* macros in nfsd4_decode_read() > NFSD: Replace READ* macros in nfsd4_decode_readdir() > NFSD: Replace READ* macros in nfsd4_decode_remove() > NFSD: Replace READ* macros in nfsd4_decode_rename() > NFSD: Replace READ* macros in nfsd4_decode_renew() > NFSD: Replace READ* macros in nfsd4_decode_secinfo() > NFSD: Replace READ* macros in nfsd4_decode_setattr() > NFSD: Replace READ* macros in nfsd4_decode_setclientid() > NFSD: Replace READ* macros in nfsd4_decode_setclientid_confirm() > NFSD: Replace READ* macros in nfsd4_decode_verify() > NFSD: Replace READ* macros in nfsd4_decode_write() > NFSD: Replace READ* macros in nfsd4_decode_release_lockowner() > NFSD: Replace READ* macros in nfsd4_decode_cb_sec() > NFSD: Replace READ* macros in nfsd4_decode_backchannel_ctl() > NFSD: Replace READ* macros in nfsd4_decode_bind_conn_to_session() > NFSD: Add a separate decoder to handle state_protect_ops > NFSD: Add a separate decoder for ssv_sp_parms > NFSD: Add a helper to decode state_protect4_a > NFSD: Add a helper to decode nfs_impl_id4 > NFSD: Add a helper to decode channel_attrs4 > NFSD: Replace READ* macros in nfsd4_decode_create_session() > NFSD: Replace READ* macros in nfsd4_decode_destroy_session() > NFSD: Replace READ* macros in nfsd4_decode_free_stateid() > NFSD: Replace READ* macros in nfsd4_decode_getdeviceinfo() > NFSD: Replace READ* macros in nfsd4_decode_layoutcommit() > NFSD: Replace READ* macros in nfsd4_decode_layoutget() > NFSD: Replace READ* macros in nfsd4_decode_layoutreturn() > NFSD: Replace READ* macros in nfsd4_decode_secinfo_no_name() > NFSD: Replace READ* macros in nfsd4_decode_sequence() > NFSD: Replace READ* macros in nfsd4_decode_test_stateid() > NFSD: Replace READ* macros in nfsd4_decode_destroy_clientid() > NFSD: Replace READ* macros in nfsd4_decode_reclaim_complete() > NFSD: Replace READ* macros in nfsd4_decode_fallocate() > NFSD: Replace READ* macros in nfsd4_decode_nl4_server() > NFSD: Replace READ* macros in nfsd4_decode_copy() > NFSD: Replace READ* macros in nfsd4_decode_copy_notify() > NFSD: Replace READ* macros in nfsd4_decode_offload_status() > NFSD: Replace READ* macros in nfsd4_decode_seek() > NFSD: Replace READ* macros in nfsd4_decode_clone() > NFSD: Replace READ* macros in nfsd4_decode_xattr_name() > NFSD: Replace READ* macros in nfsd4_decode_setxattr() > NFSD: Replace READ* macros in nfsd4_decode_listxattrs() > NFSD: Make nfsd4_ops::opnum a u32 > NFSD: Replace READ* macros in nfsd4_decode_compound() > NFSD: Remove macros that are no longer used > SUNRPC: Remove XDRBUF_SPARSE_PAGES flag in gss_proxy upcall > NFSD: Fix sparse warning in nfs4proc.c > > Dai Ngo (1): > NFSD: Fix 5 seconds delay when doing inter server copy > > Huang Guobin (1): > nfsd: Fix error return code in nfsd_file_cache_init() > > J. Bruce Fields (5): > nfsd: only call inode_query_iversion in the I_VERSION case > nfsd: simplify nfsd4_change_info > nfsd: minor nfsd4_change_attribute cleanup > nfsd4: don't query change attribute in v2/v3 case > Revert "nfsd4: support change_attr_type attribute" > > Jeff Layton (3): > nfsd: add a new EXPORT_OP_NOWCC flag to struct export_operations > nfsd: allow filesystems to opt out of subtree checking > nfsd: close cached files prior to a REMOVE or RENAME that would replace target > > Roberto Bergantinos Corpas (1): > sunrpc: clean-up cache downcall > > Tom Rix (1): > NFSD: A semicolon is not needed after a switch statement. > > Trond Myklebust (4): > exportfs: Add a function to return the raw output from fh_to_dentry() > nfsd: Fix up nfsd to ensure that timeout errors don't result in ESTALE > nfsd: Set PF_LOCAL_THROTTLE on local filesystems only > nfsd: Record NFSv4 pre/post-op attributes as non-atomic > > kazuo ito (1): > nfsd: Fix message level for normal termination > > Documentation/filesystems/nfs/exporting.rst | 52 ++ > fs/exportfs/expfs.c | 32 +- > fs/nfs/blocklayout/blocklayout.c | 2 +- > fs/nfs/blocklayout/dev.c | 2 +- > fs/nfs/dir.c | 2 +- > fs/nfs/export.c | 3 + > fs/nfs/filelayout/filelayout.c | 2 +- > fs/nfs/filelayout/filelayoutdev.c | 2 +- > fs/nfs/flexfilelayout/flexfilelayout.c | 2 +- > fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 +- > fs/nfs/nfs42xdr.c | 2 +- > fs/nfs/nfs4xdr.c | 6 +- > fs/nfs_common/grace.c | 6 +- > fs/nfsd/export.c | 6 + > fs/nfsd/filecache.c | 1 + > fs/nfsd/nfs2acl.c | 21 +- > fs/nfsd/nfs3acl.c | 8 +- > fs/nfsd/nfs3proc.c | 11 +- > fs/nfsd/nfs3xdr.c | 40 +- > fs/nfsd/nfs4proc.c | 35 +- > fs/nfsd/nfs4state.c | 3 +- > fs/nfsd/nfs4xdr.c | 2665 +++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- > fs/nfsd/nfsd.h | 9 +- > fs/nfsd/nfsfh.c | 34 +- > fs/nfsd/nfsfh.h | 22 +- > fs/nfsd/nfsproc.c | 25 +- > fs/nfsd/nfssvc.c | 50 +- > fs/nfsd/nfsxdr.c | 16 +- > fs/nfsd/trace.c | 1 + > fs/nfsd/trace.h | 176 +++++- > fs/nfsd/vfs.c | 29 +- > fs/nfsd/xdr.h | 2 - > fs/nfsd/xdr3.h | 2 - > fs/nfsd/xdr4.h | 43 +- > include/linux/exportfs.h | 13 + > include/linux/iversion.h | 13 + > include/linux/nfs4.h | 8 - > include/linux/sunrpc/svc.h | 22 +- > include/linux/sunrpc/svc_rdma.h | 36 +- > include/linux/sunrpc/svc_rdma_pcl.h | 128 +++++ > include/linux/sunrpc/svc_xprt.h | 4 +- > include/linux/sunrpc/xdr.h | 91 +++- > include/trace/events/rpcrdma.h | 171 +++--- > include/trace/events/sunrpc.h | 24 - > net/sunrpc/auth_gss/gss_rpc_upcall.c | 15 +- > net/sunrpc/auth_gss/gss_rpc_xdr.c | 3 +- > net/sunrpc/cache.c | 41 +- > net/sunrpc/svc.c | 16 +- > net/sunrpc/svc_xprt.c | 4 +- > net/sunrpc/svcsock.c | 8 +- > net/sunrpc/xdr.c | 78 ++- > net/sunrpc/xprtrdma/Makefile | 2 +- > net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 14 +- > net/sunrpc/xprtrdma/svc_rdma_pcl.c | 306 +++++++++++ > net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 316 ++++++----- > net/sunrpc/xprtrdma/svc_rdma_rw.c | 608 +++++++++++++++------ > net/sunrpc/xprtrdma/svc_rdma_sendto.c | 560 ++++++++++--------- > net/sunrpc/xprtrdma/svc_rdma_transport.c | 2 +- > 58 files changed, 3536 insertions(+), 2261 deletions(-) > create mode 100644 include/linux/sunrpc/svc_rdma_pcl.h > create mode 100644 net/sunrpc/xprtrdma/svc_rdma_pcl.c > -- > Chuck Lever > >