diff options
author | Christoph Hellwig <hch@lst.de> | 2006-01-09 23:52:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 11:01:34 -0500 |
commit | fc33a7bb9c6dd8f6e4a014976200f8fdabb3a45c (patch) | |
tree | 26f4d676de476075545e58057aa5d8c57618741d /fs/nfs/inode.c | |
parent | 0d456fa4261f43433287a10fe3ec04a9818fac64 (diff) |
[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>
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r-- | fs/nfs/inode.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 3e4ba9cb7f80..a77ee95b7efb 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -950,11 +950,20 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) | |||
950 | 950 | ||
951 | /* Flush out writes to the server in order to update c/mtime */ | 951 | /* Flush out writes to the server in order to update c/mtime */ |
952 | nfs_sync_inode(inode, 0, 0, FLUSH_WAIT|FLUSH_NOCOMMIT); | 952 | nfs_sync_inode(inode, 0, 0, FLUSH_WAIT|FLUSH_NOCOMMIT); |
953 | if (__IS_FLG(inode, MS_NOATIME)) | 953 | |
954 | need_atime = 0; | 954 | /* |
955 | else if (__IS_FLG(inode, MS_NODIRATIME) && S_ISDIR(inode->i_mode)) | 955 | * We may force a getattr if the user cares about atime. |
956 | * | ||
957 | * Note that we only have to check the vfsmount flags here: | ||
958 | * - NFS always sets S_NOATIME by so checking it would give a | ||
959 | * bogus result | ||
960 | * - NFS never sets MS_NOATIME or MS_NODIRATIME so there is | ||
961 | * no point in checking those. | ||
962 | */ | ||
963 | if ((mnt->mnt_flags & MNT_NOATIME) || | ||
964 | ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) | ||
956 | need_atime = 0; | 965 | need_atime = 0; |
957 | /* We may force a getattr if the user cares about atime */ | 966 | |
958 | if (need_atime) | 967 | if (need_atime) |
959 | err = __nfs_revalidate_inode(NFS_SERVER(inode), inode); | 968 | err = __nfs_revalidate_inode(NFS_SERVER(inode), inode); |
960 | else | 969 | else |