NFSv4 client:

Add support for va_birthtime
Fix va_ctime to use TIME_METADATA, not TIME_CREATE
This commit is contained in:
rees 2006-11-28 19:33:28 +00:00
parent 3b8270a3d5
commit 1a6d07633f
3 changed files with 27 additions and 16 deletions

View File

@ -508,6 +508,7 @@ struct nfsv4_fattr {
uint32_t fa4_rdev_major;
uint32_t fa4_rdev_minor;
struct timespec fa4_atime;
struct timespec fa4_btime;
struct timespec fa4_ctime;
struct timespec fa4_mtime;
uint64_t fa4_maxread;
@ -533,21 +534,22 @@ struct nfsv4_fattr {
#define FA4V_GID 0x00000040
#define FA4V_RDEV 0x00000080
#define FA4V_ATIME 0x00000100
#define FA4V_CTIME 0x00000200
#define FA4V_MTIME 0x00000400
#define FA4V_MAXREAD 0x00000800
#define FA4V_MAXWRITE 0x00001000
#define FA4V_TYPE 0x00002000
#define FA4V_FFREE 0x00004000
#define FA4V_FTOTAL 0x00008000
#define FA4V_MAXNAME 0x00010000
#define FA4V_SAVAIL 0x00020000
#define FA4V_SFREE 0x00040000
#define FA4V_STOTAL 0x00080000
#define FA4V_CHANGEID 0x00100000
#define FA4V_LEASE_TIME 0x00200000
#define FA4V_MAXFILESIZE 0x00400000
#define FA4V_ACL 0x00800000
#define FA4V_BTIME 0x00000200
#define FA4V_CTIME 0x00000400
#define FA4V_MTIME 0x00000800
#define FA4V_MAXREAD 0x00001000
#define FA4V_MAXWRITE 0x00002000
#define FA4V_TYPE 0x00004000
#define FA4V_FFREE 0x00008000
#define FA4V_FTOTAL 0x00010000
#define FA4V_MAXNAME 0x00020000
#define FA4V_SAVAIL 0x00040000
#define FA4V_SFREE 0x00080000
#define FA4V_STOTAL 0x00100000
#define FA4V_CHANGEID 0x00200000
#define FA4V_LEASE_TIME 0x00400000
#define FA4V_MAXFILESIZE 0x00800000
#define FA4V_ACL 0x01000000
/* Offsets into bitmask */
#define FA4_SUPPORTED_ATTRS 0

View File

@ -129,8 +129,10 @@ nfsm_v4init(void)
FA4_SET(FA4_OWNER, __getattr_bm);
FA4_SET(FA4_OWNER_GROUP, __getattr_bm);
FA4_SET(FA4_FILEID, __getattr_bm);
FA4_SET(FA4_TIME_MODIFY, __getattr_bm);
FA4_SET(FA4_TIME_ACCESS, __getattr_bm);
FA4_SET(FA4_TIME_CREATE, __getattr_bm);
FA4_SET(FA4_TIME_METADATA, __getattr_bm);
FA4_SET(FA4_TIME_MODIFY, __getattr_bm);
FA4_SET(FA4_TYPE, __readdir_bm);
FA4_SET(FA4_FSID, __readdir_bm);
@ -1343,6 +1345,11 @@ nfsm_v4dissect_attrs_xx(struct nfsv4_fattr *fa, struct mbuf **md, caddr_t *dpos)
len += 3 * NFSX_UNSIGNED;
}
if (FA4_ISSET(FA4_TIME_CREATE, bmval)) {
NFSM_MTOTIME(fa->fa4_btime);
fa->fa4_valid |= FA4V_BTIME;
len += 3 * NFSX_UNSIGNED;
}
if (FA4_ISSET(FA4_TIME_METADATA, bmval)) {
NFSM_MTOTIME(fa->fa4_ctime);
fa->fa4_valid |= FA4V_CTIME;
len += 3 * NFSX_UNSIGNED;

View File

@ -121,6 +121,8 @@ nfs4_vnop_loadattrcache(struct vnode *vp, struct nfsv4_fattr *fap,
vap->va_fileid = nfs_v4fileid4_to_fileid(fap->fa4_fileid);
if (fap->fa4_valid & FA4V_ATIME)
vap->va_atime = fap->fa4_atime;
if (fap->fa4_valid & FA4V_BTIME)
vap->va_birthtime = fap->fa4_btime;
if (fap->fa4_valid & FA4V_CTIME)
vap->va_ctime = fap->fa4_ctime;
vap->va_flags = 0;