diff options
Diffstat (limited to 'module/zfs/zfs_vnops.c')
-rw-r--r-- | module/zfs/zfs_vnops.c | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 4fa4fe074..b4ffd8d2a 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -551,7 +551,6 @@ zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) out: zfs_range_unlock(rl); - ZFS_ACCESSTIME_STAMP(zsb, zp); ZFS_EXIT(zsb); return (error); } @@ -875,8 +874,7 @@ zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) } mutex_exit(&zp->z_acl_lock); - zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime, - B_TRUE); + zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime); /* * Update the file size (zp_size) if it has changed; @@ -2211,9 +2209,6 @@ update: zap_cursor_fini(&zc); if (error == ENOENT) error = 0; - - ZFS_ACCESSTIME_STAMP(zsb, zp); - out: ZFS_EXIT(zsb); @@ -2266,11 +2261,11 @@ zfs_getattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) zfs_sb_t *zsb = ITOZSB(ip); int error = 0; uint64_t links; - uint64_t mtime[2], ctime[2]; + uint64_t atime[2], mtime[2], ctime[2]; xvattr_t *xvap = (xvattr_t *)vap; /* vap may be an xvattr_t * */ xoptattr_t *xoap = NULL; boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE; - sa_bulk_attr_t bulk[2]; + sa_bulk_attr_t bulk[3]; int count = 0; ZFS_ENTER(zsb); @@ -2278,6 +2273,7 @@ zfs_getattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) zfs_fuid_map_ids(zp, cr, &vap->va_uid, &vap->va_gid); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zsb), NULL, &atime, 16); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb), NULL, &mtime, 16); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL, &ctime, 16); @@ -2426,7 +2422,7 @@ zfs_getattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) } } - ZFS_TIME_DECODE(&vap->va_atime, zp->z_atime); + ZFS_TIME_DECODE(&vap->va_atime, atime); ZFS_TIME_DECODE(&vap->va_mtime, mtime); ZFS_TIME_DECODE(&vap->va_ctime, ctime); @@ -2473,7 +2469,6 @@ zfs_getattr_fast(struct inode *ip, struct kstat *sp) mutex_enter(&zp->z_lock); generic_fillattr(ip, sp); - ZFS_TIME_DECODE(&sp->atime, zp->z_atime); sa_object_size(zp->z_sa_hdl, &blksize, &nblocks); sp->blksize = blksize; @@ -2537,7 +2532,7 @@ zfs_setattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) uint64_t new_mode; uint64_t new_uid, new_gid; uint64_t xattr_obj; - uint64_t mtime[2], ctime[2]; + uint64_t mtime[2], ctime[2], atime[2]; znode_t *attrzp; int need_policy = FALSE; int err, err2; @@ -3011,9 +3006,9 @@ top: if (mask & ATTR_ATIME) { - ZFS_TIME_ENCODE(&vap->va_atime, zp->z_atime); + ZFS_TIME_ENCODE(&vap->va_atime, atime); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zsb), NULL, - &zp->z_atime, sizeof (zp->z_atime)); + &atime, sizeof (atime)); } if (mask & ATTR_MTIME) { @@ -3028,19 +3023,17 @@ top: NULL, mtime, sizeof (mtime)); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL, &ctime, sizeof (ctime)); - zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime, - B_TRUE); + zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime); } else if (mask != 0) { SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL, &ctime, sizeof (ctime)); - zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, ctime, - B_TRUE); + zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, ctime); if (attrzp) { SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, SA_ZPL_CTIME(zsb), NULL, &ctime, sizeof (ctime)); zfs_tstamp_update_setup(attrzp, STATE_CHANGED, - mtime, ctime, B_TRUE); + mtime, ctime); } } /* @@ -3766,7 +3759,6 @@ zfs_readlink(struct inode *ip, uio_t *uio, cred_t *cr) error = zfs_sa_readlink(zp, uio); mutex_exit(&zp->z_lock); - ZFS_ACCESSTIME_STAMP(zsb, zp); ZFS_EXIT(zsb); return (error); } @@ -4169,7 +4161,6 @@ zfs_dirty_inode(struct inode *ip, int flags) mode = ip->i_mode; zp->z_mode = mode; - zp->z_atime_dirty = 0; error = sa_bulk_update(zp->z_sa_hdl, bulk, cnt, tx); mutex_exit(&zp->z_lock); @@ -4187,6 +4178,7 @@ zfs_inactive(struct inode *ip) { znode_t *zp = ITOZ(ip); zfs_sb_t *zsb = ITOZSB(ip); + uint64_t atime[2]; int error; int need_unlock = 0; @@ -4210,9 +4202,10 @@ zfs_inactive(struct inode *ip) if (error) { dmu_tx_abort(tx); } else { + ZFS_TIME_ENCODE(&ip->i_atime, atime); mutex_enter(&zp->z_lock); (void) sa_update(zp->z_sa_hdl, SA_ZPL_ATIME(zsb), - (void *)&zp->z_atime, sizeof (zp->z_atime), tx); + (void *)&atime, sizeof (atime), tx); zp->z_atime_dirty = 0; mutex_exit(&zp->z_lock); dmu_tx_commit(tx); @@ -4322,9 +4315,6 @@ zfs_getpage(struct inode *ip, struct page *pl[], int nr_pages) err = zfs_fillpage(ip, pl, nr_pages); - if (!err) - ZFS_ACCESSTIME_STAMP(zsb, zp); - ZFS_EXIT(zsb); return (err); } |