> On Jan 6, 2022, at 11:13 AM, Ondrej Valousek <ondrej.valousek.xm@xxxxxxxxxxx> wrote: > > So I think this is what we eventually need (thanks for the pointers you gave me!): > > diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c > index 5a93a5db4fb0..e88ae4ce5263 100644 > --- a/fs/nfsd/nfs4xdr.c > +++ b/fs/nfsd/nfs4xdr.c > @@ -2865,6 +2865,9 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, > err = vfs_getattr(&path, &stat, STATX_BASIC_STATS, AT_STATX_SYNC_AS_STAT); > if (err) > goto out_nfserr; > + if (! stat.result_mask & STATX_BTIME) > + /* underlying FS does not offer btime so we can't share it */ > + bmval1 &= ~FATTR4_WORD1_TIME_CREATE; > if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE | > FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) || > (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | > @@ -3265,6 +3268,14 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, > p = xdr_encode_hyper(p, (s64)stat.mtime.tv_sec); > *p++ = cpu_to_be32(stat.mtime.tv_nsec); > } > + /* support for btime here */ > + if (bmval1 & FATTR4_WORD1_TIME_CREATE) { > + p = xdr_reserve_space(xdr, 12); > + if (!p) > + goto out_resource; > + p = xdr_encode_hyper(p, (s64)stat.btime.tv_sec); > + *p++ = cpu_to_be32(stat.btime.tv_nsec); > + } > if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) { > struct kstat parent_stat; > u64 ino = stat.ino; > > diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h > index 498e5a489826..5ef056ce7591 100644 > --- a/fs/nfsd/nfsd.h > +++ b/fs/nfsd/nfsd.h > @@ -364,7 +364,7 @@ void nfsd_lockd_shutdown(void); > | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \ > | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \ > | FATTR4_WORD1_SPACE_USED | FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_ACCESS_SET \ > - | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \ > + | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA | FATTR4_WORD1_TIME_CREATE \ > | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID) > > #define NFSD4_SUPPORTED_ATTRS_WORD2 0 > > Legal Disclaimer: This e-mail communication (and any attachment/s) is confidential and contains proprietary information, some or all of which may be legally privileged. It is intended solely for the use of the individual or entity to which it is addressed. Access to this email by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful. Thanks, Ondrej. This looks like an interesting new feature, however it's a little late for the v5.17 merge window, IMO. (On the plus side, that gives us a month or two for further review and deeper testing). Also, the change needs to be submitted as a real patch. See the Documentation/process/submitting-patches.rst file in the Linux kernel tree for information on the p's and q's. In particular: -- you need a short and full patch description. The "Describe your changes" section explains the details. -- you need to ensure your employer permits you to contribute to the Linux kernel under GPLv2. The "Sign your work - the Developer's Certificate of Origin" section explains this. I'm a little concerned about your Legal Disclaimer which suggests that anything you have sent in e-mail is already owned by Renesas and is therefore constrained for submission to the kernel. Before submitting again, can you ask your legal team for clarification? -- Chuck Lever