AFS: Use i_generation not i_version for the vnode uniquifier
Store the AFS vnode uniquifier in the i_generation field, not the i_version field of the inode struct. i_version can then be given the AFS data version number. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2e41ae225f
commit
d6e43f751f
@ -584,11 +584,11 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
|
|||||||
|
|
||||||
success:
|
success:
|
||||||
d_add(dentry, inode);
|
d_add(dentry, inode);
|
||||||
_leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%llu }",
|
_leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%u }",
|
||||||
fid.vnode,
|
fid.vnode,
|
||||||
fid.unique,
|
fid.unique,
|
||||||
dentry->d_inode->i_ino,
|
dentry->d_inode->i_ino,
|
||||||
(unsigned long long)dentry->d_inode->i_version);
|
dentry->d_inode->i_generation);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -671,10 +671,10 @@ static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
|
|||||||
* been deleted and replaced, and the original vnode ID has
|
* been deleted and replaced, and the original vnode ID has
|
||||||
* been reused */
|
* been reused */
|
||||||
if (fid.unique != vnode->fid.unique) {
|
if (fid.unique != vnode->fid.unique) {
|
||||||
_debug("%s: file deleted (uq %u -> %u I:%llu)",
|
_debug("%s: file deleted (uq %u -> %u I:%u)",
|
||||||
dentry->d_name.name, fid.unique,
|
dentry->d_name.name, fid.unique,
|
||||||
vnode->fid.unique,
|
vnode->fid.unique,
|
||||||
(unsigned long long)dentry->d_inode->i_version);
|
dentry->d_inode->i_generation);
|
||||||
spin_lock(&vnode->lock);
|
spin_lock(&vnode->lock);
|
||||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||||
spin_unlock(&vnode->lock);
|
spin_unlock(&vnode->lock);
|
||||||
|
@ -89,7 +89,7 @@ static void xdr_decode_AFSFetchStatus(const __be32 **_bp,
|
|||||||
i_size_write(&vnode->vfs_inode, size);
|
i_size_write(&vnode->vfs_inode, size);
|
||||||
vnode->vfs_inode.i_uid = status->owner;
|
vnode->vfs_inode.i_uid = status->owner;
|
||||||
vnode->vfs_inode.i_gid = status->group;
|
vnode->vfs_inode.i_gid = status->group;
|
||||||
vnode->vfs_inode.i_version = vnode->fid.unique;
|
vnode->vfs_inode.i_generation = vnode->fid.unique;
|
||||||
vnode->vfs_inode.i_nlink = status->nlink;
|
vnode->vfs_inode.i_nlink = status->nlink;
|
||||||
|
|
||||||
mode = vnode->vfs_inode.i_mode;
|
mode = vnode->vfs_inode.i_mode;
|
||||||
@ -102,6 +102,7 @@ static void xdr_decode_AFSFetchStatus(const __be32 **_bp,
|
|||||||
vnode->vfs_inode.i_ctime.tv_sec = status->mtime_server;
|
vnode->vfs_inode.i_ctime.tv_sec = status->mtime_server;
|
||||||
vnode->vfs_inode.i_mtime = vnode->vfs_inode.i_ctime;
|
vnode->vfs_inode.i_mtime = vnode->vfs_inode.i_ctime;
|
||||||
vnode->vfs_inode.i_atime = vnode->vfs_inode.i_ctime;
|
vnode->vfs_inode.i_atime = vnode->vfs_inode.i_ctime;
|
||||||
|
vnode->vfs_inode.i_version = data_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
expected_version = status->data_version;
|
expected_version = status->data_version;
|
||||||
|
@ -75,7 +75,8 @@ static int afs_inode_map_status(struct afs_vnode *vnode, struct key *key)
|
|||||||
inode->i_ctime.tv_nsec = 0;
|
inode->i_ctime.tv_nsec = 0;
|
||||||
inode->i_atime = inode->i_mtime = inode->i_ctime;
|
inode->i_atime = inode->i_mtime = inode->i_ctime;
|
||||||
inode->i_blocks = 0;
|
inode->i_blocks = 0;
|
||||||
inode->i_version = vnode->fid.unique;
|
inode->i_generation = vnode->fid.unique;
|
||||||
|
inode->i_version = vnode->status.data_version;
|
||||||
inode->i_mapping->a_ops = &afs_fs_aops;
|
inode->i_mapping->a_ops = &afs_fs_aops;
|
||||||
|
|
||||||
/* check to see whether a symbolic link is really a mountpoint */
|
/* check to see whether a symbolic link is really a mountpoint */
|
||||||
@ -100,7 +101,7 @@ static int afs_iget5_test(struct inode *inode, void *opaque)
|
|||||||
struct afs_iget_data *data = opaque;
|
struct afs_iget_data *data = opaque;
|
||||||
|
|
||||||
return inode->i_ino == data->fid.vnode &&
|
return inode->i_ino == data->fid.vnode &&
|
||||||
inode->i_version == data->fid.unique;
|
inode->i_generation == data->fid.unique;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -122,7 +123,7 @@ static int afs_iget5_set(struct inode *inode, void *opaque)
|
|||||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||||
|
|
||||||
inode->i_ino = data->fid.vnode;
|
inode->i_ino = data->fid.vnode;
|
||||||
inode->i_version = data->fid.unique;
|
inode->i_generation = data->fid.unique;
|
||||||
vnode->fid = data->fid;
|
vnode->fid = data->fid;
|
||||||
vnode->volume = data->volume;
|
vnode->volume = data->volume;
|
||||||
|
|
||||||
@ -380,8 +381,7 @@ int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
|||||||
|
|
||||||
inode = dentry->d_inode;
|
inode = dentry->d_inode;
|
||||||
|
|
||||||
_enter("{ ino=%lu v=%llu }", inode->i_ino,
|
_enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
|
||||||
(unsigned long long)inode->i_version);
|
|
||||||
|
|
||||||
generic_fillattr(inode, stat);
|
generic_fillattr(inode, stat);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user