Skip to content

Commit e377a3e

Browse files
ondrejv2chucklever
authored andcommitted
nfsd: Add support for the birth time attribute
For filesystems that supports "btime" timestamp (i.e. most modern filesystems do) we share it via kernel nfsd. Btime support for NFS client has already been added by Trond recently. Suggested-by: Bruce Fields <bfields@fieldses.org> Signed-off-by: Ondrej Valousek <ondrej.valousek.xm@renesas.com> [ cel: addressed some whitespace/checkpatch nits ] Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
1 parent 7e57714 commit e377a3e

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

fs/nfsd/nfs4xdr.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2854,6 +2854,9 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
28542854
err = vfs_getattr(&path, &stat, STATX_BASIC_STATS, AT_STATX_SYNC_AS_STAT);
28552855
if (err)
28562856
goto out_nfserr;
2857+
if (!(stat.result_mask & STATX_BTIME))
2858+
/* underlying FS does not offer btime so we can't share it */
2859+
bmval1 &= ~FATTR4_WORD1_TIME_CREATE;
28572860
if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE |
28582861
FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) ||
28592862
(bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE |
@@ -3254,6 +3257,13 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
32543257
p = xdr_encode_hyper(p, (s64)stat.mtime.tv_sec);
32553258
*p++ = cpu_to_be32(stat.mtime.tv_nsec);
32563259
}
3260+
if (bmval1 & FATTR4_WORD1_TIME_CREATE) {
3261+
p = xdr_reserve_space(xdr, 12);
3262+
if (!p)
3263+
goto out_resource;
3264+
p = xdr_encode_hyper(p, (s64)stat.btime.tv_sec);
3265+
*p++ = cpu_to_be32(stat.btime.tv_nsec);
3266+
}
32573267
if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {
32583268
struct kstat parent_stat;
32593269
u64 ino = stat.ino;

fs/nfsd/nfsd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ void nfsd_lockd_shutdown(void);
364364
| FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
365365
| FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
366366
| FATTR4_WORD1_SPACE_USED | FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_ACCESS_SET \
367-
| FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \
367+
| FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA | FATTR4_WORD1_TIME_CREATE \
368368
| FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
369369

370370
#define NFSD4_SUPPORTED_ATTRS_WORD2 0

0 commit comments

Comments
 (0)