From: Jeff Layton <jlayton@kernel.org>
To: Chuck Lever <chuck.lever@oracle.com>, Neil Brown <neilb@suse.de>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
Jonathan Corbet <corbet@lwn.net>,
Trond Myklebust <trondmy@kernel.org>,
Anna Schumaker <anna@kernel.org>
Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org
Subject: Re: [PATCH v5 09/10] nfsd: handle delegated timestamps in SETATTR
Date: Fri, 13 Dec 2024 09:14:21 -0500 [thread overview]
Message-ID: <f697868bfa7f219d51ba8251db32b22ad942ecd7.camel@kernel.org> (raw)
In-Reply-To: <2a3c0a1f-0213-4915-a4c0-a2ba31ae1bbc@oracle.com>
On Thu, 2024-12-12 at 16:06 -0500, Chuck Lever wrote:
> On 12/9/24 4:14 PM, Jeff Layton wrote:
> > Allow SETATTR to handle delegated timestamps. This patch assumes that
> > only the delegation holder has the ability to set the timestamps in this
> > way, so we allow this only if the SETATTR stateid refers to a
> > *_ATTRS_DELEG delegation.
> >
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> > fs/nfsd/nfs4proc.c | 31 ++++++++++++++++++++++++++++---
> > fs/nfsd/nfs4state.c | 2 +-
> > fs/nfsd/nfs4xdr.c | 20 ++++++++++++++++++++
> > fs/nfsd/nfsd.h | 5 ++++-
> > 4 files changed, 53 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
> > index f8a10f90bc7a4b288c20d2733c85f331cc0a8dba..fea171ffed623818c61886b786339b0b73f1053d 100644
> > --- a/fs/nfsd/nfs4proc.c
> > +++ b/fs/nfsd/nfs4proc.c
> > @@ -1135,18 +1135,43 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
> > .na_iattr = &setattr->sa_iattr,
> > .na_seclabel = &setattr->sa_label,
> > };
> > + bool save_no_wcc, deleg_attrs;
> > + struct nfs4_stid *st = NULL;
> > struct inode *inode;
> > __be32 status = nfs_ok;
> > - bool save_no_wcc;
> > int err;
> >
> > - if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
> > + deleg_attrs = setattr->sa_bmval[2] & (FATTR4_WORD2_TIME_DELEG_ACCESS |
> > + FATTR4_WORD2_TIME_DELEG_MODIFY);
> > +
> > + if (deleg_attrs || (setattr->sa_iattr.ia_valid & ATTR_SIZE)) {
> > + int flags = WR_STATE;
> > +
> > + if (setattr->sa_bmval[2] & FATTR4_WORD2_TIME_DELEG_ACCESS)
> > + flags |= RD_STATE;
> > +
> > status = nfs4_preprocess_stateid_op(rqstp, cstate,
> > &cstate->current_fh, &setattr->sa_stateid,
> > - WR_STATE, NULL, NULL);
> > + flags, NULL, &st);
> > if (status)
> > return status;
> > }
> > +
> > + if (deleg_attrs) {
> > + status = nfserr_bad_stateid;
> > + if (st->sc_type & SC_TYPE_DELEG) {
> > + struct nfs4_delegation *dp = delegstateid(st);
> > +
> > + /* Only for *_ATTRS_DELEG flavors */
> > + if (deleg_attrs_deleg(dp->dl_type))
> > + status = nfs_ok;
> > + }
> > + }
> > + if (st)
> > + nfs4_put_stid(st);
> > + if (status)
> > + return status;
> > +
> > err = fh_want_write(&cstate->current_fh);
> > if (err)
> > return nfserrno(err);
> > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > index c882eeba7830b0249ccd74654f81e63b12a30f14..a76e35f86021c5657e31e4fddf08cb5781f01e32 100644
> > --- a/fs/nfsd/nfs4state.c
> > +++ b/fs/nfsd/nfs4state.c
> > @@ -5486,7 +5486,7 @@ nfsd4_process_open1(struct nfsd4_compound_state *cstate,
> > static inline __be32
> > nfs4_check_delegmode(struct nfs4_delegation *dp, int flags)
> > {
> > - if ((flags & WR_STATE) && deleg_is_read(dp->dl_type))
> > + if (!(flags & RD_STATE) && deleg_is_read(dp->dl_type))
> > return nfserr_openmode;
> > else
> > return nfs_ok;
> > diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> > index 0561c99b5def2eccf679bf3ea0e5b1a57d5d8374..ce93a31ac5cec75b0f944d288e796e7a73641572 100644
> > --- a/fs/nfsd/nfs4xdr.c
> > +++ b/fs/nfsd/nfs4xdr.c
> > @@ -521,6 +521,26 @@ nfsd4_decode_fattr4(struct nfsd4_compoundargs *argp, u32 *bmval, u32 bmlen,
> > *umask = mask & S_IRWXUGO;
> > iattr->ia_valid |= ATTR_MODE;
> > }
> > + if (bmval[2] & FATTR4_WORD2_TIME_DELEG_ACCESS) {
> > + fattr4_time_deleg_access access;
> > +
> > + if (!xdrgen_decode_fattr4_time_deleg_access(argp->xdr, &access))
> > + return nfserr_bad_xdr;
> > + iattr->ia_atime.tv_sec = access.seconds;
> > + iattr->ia_atime.tv_nsec = access.nseconds;
> > + iattr->ia_valid |= ATTR_ATIME | ATTR_ATIME_SET | ATTR_DELEG;
> > + }
> > + if (bmval[2] & FATTR4_WORD2_TIME_DELEG_MODIFY) {
> > + fattr4_time_deleg_modify modify;
> > +
> > + if (!xdrgen_decode_fattr4_time_deleg_modify(argp->xdr, &modify))
> > + return nfserr_bad_xdr;
> > + iattr->ia_mtime.tv_sec = modify.seconds;
> > + iattr->ia_mtime.tv_nsec = modify.nseconds;
> > + iattr->ia_ctime.tv_sec = modify.seconds;
> > + iattr->ia_ctime.tv_nsec = modify.seconds;
> > + iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME | ATTR_MTIME_SET | ATTR_DELEG;
> > + }
> >
> > /* request sanity: did attrlist4 contain the expected number of words? */
> > if (attrlist4_count != xdr_stream_pos(argp->xdr) - starting_pos)
> > diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
> > index 004415651295891b3440f52a4c986e3a668a48cb..f007699aa397fe39042d80ccd568db4654d19dd5 100644
> > --- a/fs/nfsd/nfsd.h
> > +++ b/fs/nfsd/nfsd.h
> > @@ -531,7 +531,10 @@ static inline bool nfsd_attrs_supported(u32 minorversion, const u32 *bmval)
> > #endif
> > #define NFSD_WRITEABLE_ATTRS_WORD2 \
> > (FATTR4_WORD2_MODE_UMASK \
> > - | MAYBE_FATTR4_WORD2_SECURITY_LABEL)
> > + | MAYBE_FATTR4_WORD2_SECURITY_LABEL \
> > + | FATTR4_WORD2_TIME_DELEG_ACCESS \
> > + | FATTR4_WORD2_TIME_DELEG_MODIFY \
> > + )
> >
> > #define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
> > NFSD_WRITEABLE_ATTRS_WORD0
> >
>
> Hi Jeff-
>
> After this patch is applied, I see failures of the git regression suite
> on NFSv4.2 mounts.
>
> Test Summary Report
> -------------------
> ./t3412-rebase-root.sh (Wstat: 256 (exited
> 1) Tests: 25 Failed: 5)
> Failed tests: 6, 19, 21-22, 24
> Non-zero exit status: 1
> ./t3400-rebase.sh (Wstat: 256 (exited
> 1) Tests: 38 Failed: 1)
> Failed test: 31
> Non-zero exit status: 1
> ./t3406-rebase-message.sh (Wstat: 256 (exited
> 1) Tests: 32 Failed: 2)
> Failed tests: 15, 20
> Non-zero exit status: 1
> ./t3428-rebase-signoff.sh (Wstat: 256 (exited
> 1) Tests: 7 Failed: 2)
> Failed tests: 6-7
> Non-zero exit status: 1
> ./t3418-rebase-continue.sh (Wstat: 256 (exited
> 1) Tests: 29 Failed: 1)
> Failed test: 7
> Non-zero exit status: 1
> ./t3415-rebase-autosquash.sh (Wstat: 256 (exited
> 1) Tests: 27 Failed: 2)
> Failed tests: 3-4
> Non-zero exit status: 1
> ./t3404-rebase-interactive.sh (Wstat: 256 (exited
> 1) Tests: 131 Failed: 15)
> Failed tests: 32, 34-43, 45, 121-123
> Non-zero exit status: 1
> ./t1013-read-tree-submodule.sh (Wstat: 256 (exited
> 1) Tests: 68 Failed: 1)
> Failed test: 34
> Non-zero exit status: 1
> ./t2013-checkout-submodule.sh (Wstat: 256 (exited
> 1) Tests: 74 Failed: 4)
> Failed tests: 26-27, 30-31
> Non-zero exit status: 1
> ./t5500-fetch-pack.sh (Wstat: 256 (exited
> 1) Tests: 375 Failed: 1)
> Failed test: 28
> Non-zero exit status: 1
> ./t5572-pull-submodule.sh (Wstat: 256 (exited
> 1) Tests: 67 Failed: 2)
> Failed tests: 5, 7
> Non-zero exit status: 1
> Files=1007, Tests=30810, 1417 wallclock secs (11.18 usr 10.17 sys +
> 1037.05 cusr 6529.12 csys = 7587.52 CPU)
> Result: FAIL
>
> The NFS client and NFS server under test are running the same v6.13-rc2
> kernel from my git.kernel.org nfsd-testing branch.
>
>
I'm not seeing these failures. I ran the gitr suite under kdevops with
your nfsd-testing branch (6.13.0-rc2-ge9a809c5714e):
All tests successful.
Files=1007, Tests=30695, 10767 wallclock secs (13.87 usr 16.86 sys + 1160.76 cusr 17870.80 csys = 19062.29 CPU)
Result: PASS
...and looking at the results of those specific tests, they did run and
they did pass.
I'm rerunning the tests now. It's possible the underlying fs matters.
Mine is exporting xfs. Yours?
--
Jeff Layton <jlayton@kernel.org>
next prev parent reply other threads:[~2024-12-13 14:14 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-09 21:13 [PATCH v5 00/10] nfsd: implement the "delstid" draft Jeff Layton
2024-12-09 21:13 ` [PATCH v5 01/10] nfsd: fix handling of delegated change attr in CB_GETATTR Jeff Layton
2025-01-19 15:19 ` Chuck Lever
2024-12-09 21:13 ` [PATCH v5 02/10] nfs_common: make include/linux/nfs4.h include generated nfs4_1.h Jeff Layton
2024-12-09 21:13 ` [PATCH v5 03/10] nfsd: switch to autogenerated definitions for open_delegation_type4 Jeff Layton
2024-12-09 21:13 ` [PATCH v5 04/10] nfsd: rename NFS4_SHARE_WANT_* constants to OPEN4_SHARE_ACCESS_WANT_* Jeff Layton
2024-12-09 21:13 ` [PATCH v5 05/10] nfsd: prepare delegation code for handing out *_ATTRS_DELEG delegations Jeff Layton
2024-12-09 21:13 ` [PATCH v5 06/10] nfsd: add support for FATTR4_OPEN_ARGUMENTS Jeff Layton
2024-12-09 21:13 ` [PATCH v5 07/10] nfsd: rework NFS4_SHARE_WANT_* flag handling Jeff Layton
2024-12-09 21:14 ` [PATCH v5 08/10] nfsd: add support for delegated timestamps Jeff Layton
2024-12-09 21:14 ` [PATCH v5 09/10] nfsd: handle delegated timestamps in SETATTR Jeff Layton
2024-12-12 21:06 ` Chuck Lever
2024-12-13 14:14 ` Jeff Layton [this message]
2024-12-13 14:18 ` Chuck Lever
2024-12-14 14:55 ` Jeff Layton
2024-12-14 16:34 ` Chuck Lever
2024-12-14 17:02 ` Chuck Lever
2024-12-15 18:52 ` Chuck Lever
2024-12-09 21:14 ` [PATCH v5 10/10] nfsd: implement OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION Jeff Layton
2024-12-09 22:33 ` [PATCH v5 00/10] nfsd: implement the "delstid" draft cel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f697868bfa7f219d51ba8251db32b22ad942ecd7.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=Dai.Ngo@oracle.com \
--cc=anna@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=okorniev@redhat.com \
--cc=tom@talpey.com \
--cc=trondmy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox