[PATCH] per-mountpoint noatime/nodiratime
Turn noatime and nodiratime into per-mount instead of per-sb flags. After all the preparations this is a rather trivial patch. The mount code needs to treat the two options as per-mount instead of per-superblock, and touch_atime needs to be changed to check the new MNT_ flags in addition to the MS_ flags that are kept for filesystems that are always noatime/nodiratime but not user settable anymore. Besides that core code only nfs needed an update because it's leaving atime updates to the server and thus sets the S_NOATIME flag on every inode, but needs to know whether it's a real noatime mount for an getattr optimization. While we're at it I've killed the IS_NOATIME/IS_NODIRATIME macros that were only used by touch_atime. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
0d456fa426
commit
fc33a7bb9c
@@ -950,11 +950,20 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
|
||||
|
||||
/* Flush out writes to the server in order to update c/mtime */
|
||||
nfs_sync_inode(inode, 0, 0, FLUSH_WAIT|FLUSH_NOCOMMIT);
|
||||
if (__IS_FLG(inode, MS_NOATIME))
|
||||
|
||||
/*
|
||||
* We may force a getattr if the user cares about atime.
|
||||
*
|
||||
* Note that we only have to check the vfsmount flags here:
|
||||
* - NFS always sets S_NOATIME by so checking it would give a
|
||||
* bogus result
|
||||
* - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
|
||||
* no point in checking those.
|
||||
*/
|
||||
if ((mnt->mnt_flags & MNT_NOATIME) ||
|
||||
((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
|
||||
need_atime = 0;
|
||||
else if (__IS_FLG(inode, MS_NODIRATIME) && S_ISDIR(inode->i_mode))
|
||||
need_atime = 0;
|
||||
/* We may force a getattr if the user cares about atime */
|
||||
|
||||
if (need_atime)
|
||||
err = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
|
||||
else
|
||||
|
Reference in New Issue
Block a user