Message ID | 20171222120556.7435-6-jlayton@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Jeff Layton <jlayton@kernel.org> wrote: > Note that AFS has quite a different definition for this counter. AFS > only increments it on changes to the data, not for the metadata. This also applies to AFS directories: create, mkdir, unlink, rmdir, link, symlink, rename, and mountpoint creation/removal all bump the data version number on a directory by exactly one if they change it. David
On Tue, 2018-01-02 at 17:20 +0000, David Howells wrote: > Jeff Layton <jlayton@kernel.org> wrote: > > > Note that AFS has quite a different definition for this counter. AFS > > only increments it on changes to the data, not for the metadata. > > This also applies to AFS directories: create, mkdir, unlink, rmdir, link, > symlink, rename, and mountpoint creation/removal all bump the data version > number on a directory by exactly one if they change it. > Thanks! I updated that part of the the commit log to read: Note that AFS has quite a different definition for this counter. AFS only increments it on changes to the data to the data in regular files and contents of the directories. Inode metadata changes do not result in a version increment.
Jeff Layton <jlayton@kernel.org> wrote: > Thanks! I updated that part of the the commit log to read: > > Note that AFS has quite a different definition for this counter. AFS > only increments it on changes to the data to the data in regular files > and contents of the directories. Inode metadata changes do not result > in a version increment. Sounds good. David
diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index b90ef39ae914..88ec38c2d83c 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c @@ -13,6 +13,7 @@ #include <linux/slab.h> #include <linux/sched.h> #include <linux/circ_buf.h> +#include <linux/iversion.h> #include "internal.h" #include "afs_fs.h" @@ -124,7 +125,7 @@ static void xdr_decode_AFSFetchStatus(const __be32 **_bp, vnode->vfs_inode.i_ctime.tv_sec = status->mtime_client; vnode->vfs_inode.i_mtime = vnode->vfs_inode.i_ctime; vnode->vfs_inode.i_atime = vnode->vfs_inode.i_ctime; - vnode->vfs_inode.i_version = data_version; + inode_set_iversion_raw(&vnode->vfs_inode, data_version); } expected_version = status->data_version; diff --git a/fs/afs/inode.c b/fs/afs/inode.c index 3415eb7484f6..dcd2e08d6cdb 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c @@ -21,6 +21,7 @@ #include <linux/sched.h> #include <linux/mount.h> #include <linux/namei.h> +#include <linux/iversion.h> #include "internal.h" static const struct inode_operations afs_symlink_inode_operations = { @@ -89,7 +90,7 @@ static int afs_inode_map_status(struct afs_vnode *vnode, struct key *key) inode->i_atime = inode->i_mtime = inode->i_ctime; inode->i_blocks = 0; inode->i_generation = vnode->fid.unique; - inode->i_version = vnode->status.data_version; + inode_set_iversion_raw(inode, vnode->status.data_version); inode->i_mapping->a_ops = &afs_fs_aops; read_sequnlock_excl(&vnode->cb_lock); @@ -218,7 +219,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name, inode->i_ctime.tv_nsec = 0; inode->i_atime = inode->i_mtime = inode->i_ctime; inode->i_blocks = 0; - inode->i_version = 0; + inode_set_iversion_raw(inode, 0); inode->i_generation = 0; set_bit(AFS_VNODE_PSEUDODIR, &vnode->flags);