mbox series

[GIT,PULL] nfsd changes for v6.7 (early)

Message ID 34E014FF-351E-4977-B694-060A5DADD35A@oracle.com (mailing list archive)
State New, archived
Headers show
Series [GIT,PULL] nfsd changes for v6.7 (early) | expand

Pull-request

https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.7

Message

Chuck Lever Oct. 25, 2023, 2:23 p.m. UTC
Hi Linus-

The following changes since commit 58720809f52779dc0f08e53e54b014209d13eebb:

  Linux 6.6-rc6 (2023-10-15 13:34:39 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.7

for you to fetch changes up to 3fd2ca5be07f6a43211591a45b43df9e7b6eba00:

  svcrdma: Fix tracepoint printk format (2023-10-16 12:44:40 -0400)

----------------------------------------------------------------
NFSD 6.7 Release Notes

This release completes the SunRPC thread scheduler work that was
begun in v6.6. The scheduler can now find an svc thread to wake in
constant time and without a list walk. Thanks again to Neil Brown
for this overhaul.

Lorenzo Bianconi contributed infrastructure for a netlink-based
NFSD control plane. The long-term plan is to provide the same
functionality as found in /proc/fs/nfsd, plus some interesting
additions, and then migrate the NFSD user space utilities to
netlink.

A long series to overhaul NFSD's NFSv4 operation encoding was
applied in this release. The goals are to bring this family of
encoding functions in line with the matching NFSv4 decoding
functions and with the NFSv2 and NFSv3 XDR functions, preparing
the way for better memory safety and maintainability.

A further improvement to NFSD's write delegation support was
contributed by Dai Ngo. This adds a CB_GETATTR callback,
enabling the server to retrieve cached size and mtime data from
clients holding write delegations. If the server can retrieve
this information, it does not have to recall the delegation in
some cases.

The usual panoply of bug fixes and minor improvements round out
this release. As always I am grateful to all contributors,
reviewers, and testers.

----------------------------------------------------------------
Alexander Aring (4):
      lockd: introduce safe async lock op
      lockd: don't call vfs_lock_file() for pending requests
      lockd: fix race in async lock request handling
      lockd: add doc to enable EXPORT_OP_ASYNC_LOCK

Chuck Lever (92):
      SUNRPC: Clean up bc_svc_process()
      tools: ynl: Add source files for nfsd netlink protocol
      SUNRPC: Remove BUG_ON call sites
      NFSD: Add simple u32, u64, and bool encoders
      NFSD: Rename nfsd4_encode_bitmap()
      NFSD: Clean up nfsd4_encode_setattr()
      NFSD: Add struct nfsd4_fattr_args
      NFSD: Add nfsd4_encode_fattr4__true()
      NFSD: Add nfsd4_encode_fattr4__false()
      NFSD: Add nfsd4_encode_fattr4_supported_attrs()
      NFSD: Add nfsd4_encode_fattr4_type()
      NFSD: Add nfsd4_encode_fattr4_fh_expire_type()
      NFSD: Add nfsd4_encode_fattr4_change()
      NFSD: Add nfsd4_encode_fattr4_size()
      NFSD: Add nfsd4_encode_fattr4_fsid()
      NFSD: Add nfsd4_encode_fattr4_lease_time()
      NFSD: Add nfsd4_encode_fattr4_rdattr_error()
      NFSD: Add nfsd4_encode_fattr4_aclsupport()
      NFSD: Add nfsd4_encode_nfsace4()
      NFSD: Add nfsd4_encode_fattr4_acl()
      NFSD: Add nfsd4_encode_fattr4_filehandle()
      NFSD: Add nfsd4_encode_fattr4_fileid()
      NFSD: Add nfsd4_encode_fattr4_files_avail()
      NFSD: Add nfsd4_encode_fattr4_files_free()
      NFSD: Add nfsd4_encode_fattr4_files_total()
      NFSD: Add nfsd4_encode_fattr4_fs_locations()
      NFSD: Add nfsd4_encode_fattr4_maxfilesize()
      NFSD: Add nfsd4_encode_fattr4_maxlink()
      NFSD: Add nfsd4_encode_fattr4_maxname()
      NFSD: Add nfsd4_encode_fattr4_maxread()
      NFSD: Add nfsd4_encode_fattr4_maxwrite()
      NFSD: Add nfsd4_encode_fattr4_mode()
      NFSD: Add nfsd4_encode_fattr4_numlinks()
      NFSD: Add nfsd4_encode_fattr4_owner()
      NFSD: Add nfsd4_encode_fattr4_owner_group()
      NFSD: Add nfsd4_encode_fattr4_rawdev()
      NFSD: Add nfsd4_encode_fattr4_space_avail()
      NFSD: Add nfsd4_encode_fattr4_space_free()
      NFSD: Add nfsd4_encode_fattr4_space_total()
      NFSD: Add nfsd4_encode_fattr4_space_used()
      NFSD: Add nfsd4_encode_fattr4_time_access()
      NFSD: Add nfsd4_encode_fattr4_time_create()
      NFSD: Add nfsd4_encode_fattr4_time_delta()
      NFSD: Add nfsd4_encode_fattr4_time_metadata()
      NFSD: Add nfsd4_encode_fattr4_time_modify()
      NFSD: Add nfsd4_encode_fattr4_mounted_on_fileid()
      NFSD: Add nfsd4_encode_fattr4_fs_layout_types()
      NFSD: Add nfsd4_encode_fattr4_layout_types()
      NFSD: Add nfsd4_encode_fattr4_layout_blksize()
      NFSD: Add nfsd4_encode_fattr4_suppattr_exclcreat()
      NFSD: Add nfsd4_encode_fattr4_sec_label()
      NFSD: Add nfsd4_encode_fattr4_xattr_support()
      NFSD: Copy FATTR4 bit number definitions from RFCs
      NFSD: Use a bitmask loop to encode FATTR4 results
      NFSD: Rename nfsd4_encode_fattr()
      NFSD: Add nfsd4_encode_count4()
      NFSD: Clean up nfsd4_encode_stateid()
      NFSD: Make @lgp parameter of ->encode_layoutget a const pointer
      NFSD: Clean up nfsd4_encode_layoutget()
      NFSD: Clean up nfsd4_encode_layoutcommit()
      NFSD: Clean up nfsd4_encode_layoutreturn()
      NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer
      NFSD: Clean up nfsd4_encode_getdeviceinfo()
      NFSD: Remove a layering violation when encoding lock_denied
      NFSD: Add nfsd4_encode_lock_owner4()
      NFSD: Refactor nfsd4_encode_lock_denied()
      NFSD: Add nfsd4_encode_open_read_delegation4()
      NFSD: Add nfsd4_encode_open_write_delegation4()
      NFSD: Add nfsd4_encode_open_none_delegation4()
      NFSD: Add nfsd4_encode_open_delegation4()
      NFSD: Clean up nfsd4_encode_open()
      NFSD: Add a utility function for encoding sessionid4 objects
      NFSD: Add nfsd4_encode_channel_attr4()
      NFSD: Restructure nfsd4_encode_create_session()
      NFSD: Clean up nfsd4_encode_sequence()
      NFSD: Rename nfsd4_encode_dirent()
      NFSD: Clean up nfsd4_encode_rdattr_error()
      NFSD: Add an nfsd4_encode_nfs_cookie4() helper
      NFSD: Clean up nfsd4_encode_entry4()
      NFSD: Clean up nfsd4_encode_readdir()
      NFSD: Clean up nfsd4_encode_access()
      NFSD: Clean up nfsd4_do_encode_secinfo()
      NFSD: Clean up nfsd4_encode_exchange_id()
      NFSD: Clean up nfsd4_encode_test_stateid()
      NFSD: Clean up nfsd4_encode_copy()
      NFSD: Clean up nfsd4_encode_copy_notify()
      NFSD: Clean up nfsd4_encode_offset_status()
      NFSD: Clean up nfsd4_encode_seek()
      NFSD: Rewrite synopsis of nfsd_percpu_counters_init()
      NFSD: Fix frame size warning in svc_export_parse()
      svcrdma: Drop connection after an RDMA Read error
      svcrdma: Fix tracepoint printk format

Dai Ngo (4):
      NFSD: initialize copy->cp_clp early in nfsd4_copy for use by trace point
      NFSD: add trace points to track server copy progress
      NFSD: add support for CB_GETATTR callback
      NFSD: handle GETATTR conflict with write delegation

KaiLong Wang (3):
      NFSD: Clean up errors in stats.c
      nfsd: Clean up errors in nfs4state.c
      nfsd: Clean up errors in nfs3proc.c

Kinglong Mee (1):
      nfs: fix the typo of rfc number about xattr in NFSv4

Lorenzo Bianconi (2):
      NFSD: introduce netlink stubs
      NFSD: add rpc_status netlink support

NeilBrown (18):
      SUNRPC: move all of xprt handling into svc_xprt_handle()
      SUNRPC: rename and refactor svc_get_next_xprt()
      SUNRPC: integrate back-channel processing with svc_recv()
      lockd: hold a reference to nlmsvc_serv while stopping the thread.
      SUNRPC: change how svc threads are asked to exit.
      SUNRPC: add list of idle threads
      SUNRPC: discard SP_CONGESTED
      llist: add interface to check if a node is on a list.
      SUNRPC: change service idle list to be an llist
      llist: add llist_del_first_this()
      lib: add light-weight queuing mechanism.
      SUNRPC: rename some functions from rqst_ to svc_thread_
      SUNRPC: only have one thread waking up at a time
      SUNRPC: use lwq for sp_sockets - renamed to sp_xprts
      SUNRPC: change sp_nrthreads to atomic_t
      SUNRPC: discard sp_lock
      SUNRPC: change the back-channel queue to lwq
      NFSD: simplify error paths in nfsd_svc()

Sicong Huang (1):
      NFSD: clean up alloc_init_deleg()

Trond Myklebust (2):
      nfsd: Handle EOPENSTALE correctly in the filecache
      nfsd: Don't reset the write verifier on a commit EAGAIN

 Documentation/filesystems/nfs/exporting.rst |    7 +
 Documentation/netlink/specs/nfsd.yaml       |   89 +++
 fs/lockd/svc.c                              |    7 +-
 fs/lockd/svclock.c                          |   43 +-
 fs/locks.c                                  |   12 +-
 fs/nfs/callback.c                           |   46 +-
 fs/nfsd/Makefile                            |    3 +-
 fs/nfsd/blocklayoutxdr.c                    |    6 +-
 fs/nfsd/blocklayoutxdr.h                    |    4 +-
 fs/nfsd/export.c                            |   32 +-
 fs/nfsd/export.h                            |    4 +-
 fs/nfsd/filecache.c                         |   27 +-
 fs/nfsd/flexfilelayoutxdr.c                 |    6 +-
 fs/nfsd/flexfilelayoutxdr.h                 |    4 +-
 fs/nfsd/netlink.c                           |   32 ++
 fs/nfsd/netlink.h                           |   22 +
 fs/nfsd/nfs3proc.c                          |    5 +-
 fs/nfsd/nfs4callback.c                      |   97 +++-
 fs/nfsd/nfs4layouts.c                       |    6 +-
 fs/nfsd/nfs4proc.c                          |   32 +-
 fs/nfsd/nfs4state.c                         |  156 +++++-
 fs/nfsd/nfs4xdr.c                           | 2700 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------
 fs/nfsd/nfsctl.c                            |  203 +++++++
 fs/nfsd/nfsd.h                              |   17 +
 fs/nfsd/nfsfh.c                             |    2 +-
 fs/nfsd/nfsfh.h                             |    3 +-
 fs/nfsd/nfssvc.c                            |   42 +-
 fs/nfsd/pnfs.h                              |    6 +-
 fs/nfsd/state.h                             |   27 +-
 fs/nfsd/stats.c                             |    4 +-
 fs/nfsd/stats.h                             |   18 +-
 fs/nfsd/trace.h                             |   87 +++
 fs/nfsd/vfs.c                               |   61 ++-
 fs/nfsd/vfs.h                               |    4 +-
 fs/nfsd/xdr4.h                              |  154 +++++-
 fs/nfsd/xdr4cb.h                            |   18 +
 include/linux/exportfs.h                    |   14 +
 include/linux/iversion.h                    |    2 +-
 include/linux/llist.h                       |   46 ++
 include/linux/lockd/lockd.h                 |    2 +-
 include/linux/lwq.h                         |  124 +++++
 include/linux/nfs4.h                        |  262 ++++++---
 include/linux/sunrpc/svc.h                  |   45 +-
 include/linux/sunrpc/svc_xprt.h             |    2 +-
 include/linux/sunrpc/xprt.h                 |    3 +-
 include/trace/events/rpcrdma.h              |   10 +-
 include/trace/events/sunrpc.h               |    1 -
 include/uapi/linux/nfsd_netlink.h           |   39 ++
 lib/Kconfig                                 |    5 +
 lib/Makefile                                |    2 +-
 lib/llist.c                                 |   28 +
 lib/lwq.c                                   |  158 ++++++
 net/sunrpc/backchannel_rqst.c               |   13 +-
 net/sunrpc/svc.c                            |  155 +++---
 net/sunrpc/svc_xprt.c                       |  238 ++++----
 net/sunrpc/xprtrdma/backchannel.c           |    6 +-
 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c     |    3 +-
 tools/net/ynl/Makefile.deps                 |    1 +
 tools/net/ynl/generated/Makefile            |    2 +-
 tools/net/ynl/generated/nfsd-user.c         |   95 ++++
 tools/net/ynl/generated/nfsd-user.h         |   33 ++
 61 files changed, 3531 insertions(+), 1744 deletions(-)
 create mode 100644 Documentation/netlink/specs/nfsd.yaml
 create mode 100644 fs/nfsd/netlink.c
 create mode 100644 fs/nfsd/netlink.h
 create mode 100644 include/linux/lwq.h
 create mode 100644 include/uapi/linux/nfsd_netlink.h
 create mode 100644 lib/lwq.c
 create mode 100644 tools/net/ynl/generated/nfsd-user.c
 create mode 100644 tools/net/ynl/generated/nfsd-user.h

--
Chuck Lever

Comments

Linus Torvalds Oct. 30, 2023, 9:31 p.m. UTC | #1
On Wed, 25 Oct 2023 at 04:24, Chuck Lever III <chuck.lever@oracle.com> wrote:
>
> This release completes the SunRPC thread scheduler work that was
> begun in v6.6. The scheduler can now find an svc thread to wake in
> constant time and without a list walk. Thanks again to Neil Brown
> for this overhaul.

Btw, the "help" text for the new Kconfig option that this introduces
is just ridiculously bad.

I react to these things, because I keep telling people that our
Kconfig is one of the nastier parts to people just building and
testing their own kernels. Yes, you can start with whatever distro
default config, and build your own, and install it, but when people
then introduce new options and ask insane and unhelpful questions,
that scares off any sane person.

So Kconfig questions really need to make sense, and they need to have
help messages that are useful..

Honestly, that LWQ_TEST option probably fails both cases.  The
"testing" is a toy, and the Kconfig option is horrific. I literally
think that we would be better off removing that code. Any bug found by
that testv would be so fundamental as to not be worth testing for.

                 Linus
Chuck Lever Oct. 30, 2023, 11:21 p.m. UTC | #2
> On Oct 30, 2023, at 2:31 PM, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> On Wed, 25 Oct 2023 at 04:24, Chuck Lever III <chuck.lever@oracle.com> wrote:
>> 
>> This release completes the SunRPC thread scheduler work that was
>> begun in v6.6. The scheduler can now find an svc thread to wake in
>> constant time and without a list walk. Thanks again to Neil Brown
>> for this overhaul.
> 
> Btw, the "help" text for the new Kconfig option that this introduces
> is just ridiculously bad.
> 
> I react to these things, because I keep telling people that our
> Kconfig is one of the nastier parts to people just building and
> testing their own kernels. Yes, you can start with whatever distro
> default config, and build your own, and install it, but when people
> then introduce new options and ask insane and unhelpful questions,
> that scares off any sane person.
> 
> So Kconfig questions really need to make sense, and they need to have
> help messages that are useful..
> 
> Honestly, that LWQ_TEST option probably fails both cases.  The
> "testing" is a toy, and the Kconfig option is horrific. I literally
> think that we would be better off removing that code. Any bug found by
> that testv would be so fundamental as to not be worth testing for.

I have to admit I didn't look too closely at that part
of the series, except to note that there's no maintainer
of record for those files. That's probably why there was
little initial pushback on the scant help text.

Do you need a refreshed PR with the testing bit removed,
or can you live with Neil or me sending a subsequent
fix-up later in the merge window?


--
Chuck Lever
Linus Torvalds Oct. 30, 2023, 11:42 p.m. UTC | #3
On Mon, 30 Oct 2023 at 13:21, Chuck Lever III <chuck.lever@oracle.com> wrote:
>
> Do you need a refreshed PR with the testing bit removed,
> or can you live with Neil or me sending a subsequent
> fix-up later in the merge window?

Oh, I've pulled it, I just haven't pushed out my recent merges yet.

I realize that my complaints are nit-picky and they don't hold up pull
requests. It's just that bad Kconfig questions are a pet peeve of
mine.

But being a pet peeve doesn't make it a showstopper..

          Linus
pr-tracker-bot@kernel.org Oct. 30, 2023, 11:50 p.m. UTC | #4
The pull request you sent on Wed, 25 Oct 2023 14:23:42 +0000:

> https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.7

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/8b16da681eb0c9b9cb2f9abd0dade67559cfb48d

Thank you!