Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 1 addition & 12 deletions module/os/linux/zfs/zfs_vnops_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -2613,19 +2613,8 @@ zfs_setattr(znode_t *zp, vattr_t *vap, int flags, cred_t *cr, zidmap_t *mnt_ns)
if (fuid_dirtied)
zfs_fuid_sync(zfsvfs, tx);

if (mask != 0) {
if (mask != 0)
zfs_log_setattr(zilog, tx, TX_SETATTR, zp, vap, mask, fuidp);
/*
* Ensure that the z_seq is always incremented on setattr
* operation. This is required for change accounting for
* NFS clients.
*
* ATTR_MODE already increments via zfs_acl_chmod_setattr.
* ATTR_SIZE already increments via zfs_freesp.
*/
if (!(mask & (ATTR_MODE | ATTR_SIZE)))
zp->z_seq++;
}

mutex_exit(&zp->z_lock);
if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE))
Expand Down
26 changes: 0 additions & 26 deletions module/os/linux/zfs/zpl_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -506,32 +506,6 @@ zpl_getattr_impl(const struct path *path, struct kstat *stat, u32 request_mask,
}
#endif

#ifdef STATX_CHANGE_COOKIE
if (request_mask & STATX_CHANGE_COOKIE) {
/*
* knfsd uses the STATX_CHANGE_COOKIE to surface to clients
* change_info4 data, which is used to implement NFS client
* name caching (see RFC 8881 Section 10.8). This number
* should always increase with changes and should not be
* reused. We cannot simply present ctime here because
* ZFS uses a coarse timer to set them, which may cause
* clients to fail to detect changes and invalidate cache.
*
* ZFS always increments znode z_seq number, but this is
* uint_t and so we mask in ctime to upper bits.
*
* STATX_ATTR_CHANGE_MONOTONIC is advertised
* to prevent knfsd from generating the change cookie
* based on ctime. C.f. nfsd4_change_attribute in
* fs/nfsd/nfsfh.c.
*/
stat->change_cookie =
((u64)stat->ctime.tv_sec << 32) | zp->z_seq;
stat->attributes |= STATX_ATTR_CHANGE_MONOTONIC;
stat->result_mask |= STATX_CHANGE_COOKIE;
}
#endif

#ifdef STATX_DIOALIGN
if (request_mask & STATX_DIOALIGN) {
uint64_t align;
Expand Down
Loading