mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
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>
This commit is contained in:
parent
7e57714cd0
commit
e377a3e698
@ -2854,6 +2854,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);
|
err = vfs_getattr(&path, &stat, STATX_BASIC_STATS, AT_STATX_SYNC_AS_STAT);
|
||||||
if (err)
|
if (err)
|
||||||
goto out_nfserr;
|
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 |
|
if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE |
|
||||||
FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) ||
|
FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) ||
|
||||||
(bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE |
|
(bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE |
|
||||||
@ -3254,6 +3257,13 @@ out_acl:
|
|||||||
p = xdr_encode_hyper(p, (s64)stat.mtime.tv_sec);
|
p = xdr_encode_hyper(p, (s64)stat.mtime.tv_sec);
|
||||||
*p++ = cpu_to_be32(stat.mtime.tv_nsec);
|
*p++ = cpu_to_be32(stat.mtime.tv_nsec);
|
||||||
}
|
}
|
||||||
|
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) {
|
if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {
|
||||||
struct kstat parent_stat;
|
struct kstat parent_stat;
|
||||||
u64 ino = stat.ino;
|
u64 ino = stat.ino;
|
||||||
|
@ -364,7 +364,7 @@ void nfsd_lockd_shutdown(void);
|
|||||||
| FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
|
| 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_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
|
||||||
| FATTR4_WORD1_SPACE_USED | FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_ACCESS_SET \
|
| 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)
|
| FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
|
||||||
|
|
||||||
#define NFSD4_SUPPORTED_ATTRS_WORD2 0
|
#define NFSD4_SUPPORTED_ATTRS_WORD2 0
|
||||||
|
Loading…
Reference in New Issue
Block a user