mbox series

[v2,0/8] Make NFSv4 OPEN(CREATE) less brittle

Message ID 165254610700.2361.2480451215356922637.stgit@bazille.1015granger.net (mailing list archive)
Headers show
Series Make NFSv4 OPEN(CREATE) less brittle | expand

Message

Chuck Lever May 14, 2022, 4:37 p.m. UTC
Attempt to address occasional reports of failures caused by NFSv4
OPEN(CREATE) failing internally only after the target file object
has already been created.

The basic approach is to re-organize the NFSv4 OPEN code path so
that common failure modes occur /before/ the call to vfs_create()
rather than afterwards. In addition, the local file is opened and
created atomically so that another client can't race and de-permit
that file just after it is created but before the server has opened
it.

This series was posted a few weeks ago as an RFC. Since then, Red
Hat QE has used a Lustre racer-based reproducer to confirm that
the issue is not reproducible. Therefore I'd like to include this
series in the NFSD 5.19 pull request.

Changes since v1:
- Address review comments in dentry_create()


---

Chuck Lever (8):
      NFSD: Clean up nfsd3_proc_create()
      NFSD: Avoid calling fh_drop_write() twice in do_nfsd_create()
      NFSD: Refactor nfsd_create_setattr()
      NFSD: Refactor NFSv3 CREATE
      NFSD: Refactor NFSv4 OPEN(CREATE)
      NFSD: Remove do_nfsd_create()
      NFSD: Clean up nfsd_open_verified()
      NFSD: Instantiate a struct file when creating a regular NFSv4 file


 fs/nfsd/filecache.c |  51 +++++++--
 fs/nfsd/filecache.h |   2 +
 fs/nfsd/nfs3proc.c  | 141 +++++++++++++++++++++----
 fs/nfsd/nfs4proc.c  | 197 +++++++++++++++++++++++++++++++++--
 fs/nfsd/nfs4state.c |  16 ++-
 fs/nfsd/vfs.c       | 245 ++++++++++----------------------------------
 fs/nfsd/vfs.h       |  14 +--
 fs/nfsd/xdr4.h      |   1 +
 fs/open.c           |  42 ++++++++
 include/linux/fs.h  |   2 +
 10 files changed, 469 insertions(+), 242 deletions(-)

--
Chuck Lever