vfs: Add 64 bit i_version support
The i_version field of the inode is changed to be a 64-bit counter that is set on every inode creation and that is incremented every time the inode data is modified (similarly to the "ctime" time-stamp). The aim is to fulfill a NFSv4 requirement for rfc3530. This first part concerns the vfs, it converts the 32-bit i_version in the generic inode to a 64-bit, a flag is added in the super block in order to check if the feature is enabled and the i_version is incremented in the vfs. Signed-off-by: Mingming Cao <cmm@us.ibm.com> Signed-off-by: Jean Noel Cordenner <jean-noel.cordenner@bull.net> Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
This commit is contained in:
committed by
Theodore Ts'o
parent
818d276ceb
commit
7a224228ed
22
fs/inode.c
22
fs/inode.c
@@ -1242,6 +1242,23 @@ void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
|
||||
}
|
||||
EXPORT_SYMBOL(touch_atime);
|
||||
|
||||
/**
|
||||
* inode_inc_iversion - increments i_version
|
||||
* @inode: inode that need to be updated
|
||||
*
|
||||
* Every time the inode is modified, the i_version field
|
||||
* will be incremented.
|
||||
* The filesystem has to be mounted with i_version flag
|
||||
*
|
||||
*/
|
||||
|
||||
void inode_inc_iversion(struct inode *inode)
|
||||
{
|
||||
spin_lock(&inode->i_lock);
|
||||
inode->i_version++;
|
||||
spin_unlock(&inode->i_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* file_update_time - update mtime and ctime time
|
||||
* @file: file accessed
|
||||
@@ -1276,6 +1293,11 @@ void file_update_time(struct file *file)
|
||||
sync_it = 1;
|
||||
}
|
||||
|
||||
if (IS_I_VERSION(inode)) {
|
||||
inode_inc_iversion(inode);
|
||||
sync_it = 1;
|
||||
}
|
||||
|
||||
if (sync_it)
|
||||
mark_inode_dirty_sync(inode);
|
||||
}
|
||||
|
Reference in New Issue
Block a user