[PATCH] switch autofs4 to touch_atime()
authorChristoph Hellwig <hch@lst.de>
Tue, 10 Jan 2006 04:52:02 +0000 (20:52 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 10 Jan 2006 16:01:31 +0000 (08:01 -0800)
After my lookup_hash patch ->d_revalidate always gets a valid struct nameidata
passed (unless you use lookup_one_len which autofs4 doesn't), so we can switch
it from update_atime to touch_atime.  This is a bit of an academic excercise
because autofs has a 1:1 vfsmount superblock relation, but I want to get rid
of update_atime so filesystems authors can't easily screw up per-mountpoint
noatime support.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Cc: Ian Kent <raven@themaw.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/autofs4/root.c

index 541b19e6fec9e71db12e60bba01eb5e15a291f42..14aa70282e8ca8feb20875cfbe86485386f556d8 100644 (file)
@@ -86,7 +86,7 @@ static int autofs4_root_readdir(struct file *file, void *dirent,
 
 /* Update usage from here to top of tree, so that scan of
    top-level directories will give a useful result */
-static void autofs4_update_usage(struct dentry *dentry)
+static void autofs4_update_usage(struct vfsmount *mnt, struct dentry *dentry)
 {
        struct dentry *top = dentry->d_sb->s_root;
 
@@ -95,7 +95,7 @@ static void autofs4_update_usage(struct dentry *dentry)
                struct autofs_info *ino = autofs4_dentry_ino(dentry);
 
                if (ino) {
-                       update_atime(dentry->d_inode);
+                       touch_atime(mnt, dentry);
                        ino->last_used = jiffies;
                }
        }
@@ -289,10 +289,10 @@ out:
        return autofs4_dcache_readdir(file, dirent, filldir);
 }
 
-static int try_to_fill_dentry(struct dentry *dentry, 
-                             struct super_block *sb,
-                             struct autofs_sb_info *sbi, int flags)
+static int try_to_fill_dentry(struct vfsmount *mnt, struct dentry *dentry, int flags)
 {
+       struct super_block *sb = mnt->mnt_sb;
+       struct autofs_sb_info *sbi = autofs4_sbi(sb);
        struct autofs_info *de_info = autofs4_dentry_ino(dentry);
        int status = 0;
 
@@ -367,7 +367,7 @@ static int try_to_fill_dentry(struct dentry *dentry,
        /* We don't update the usages for the autofs daemon itself, this
           is necessary for recursive autofs mounts */
        if (!autofs4_oz_mode(sbi))
-               autofs4_update_usage(dentry);
+               autofs4_update_usage(mnt, dentry);
 
        spin_lock(&dentry->d_lock);
        dentry->d_flags &= ~DCACHE_AUTOFS_PENDING;
@@ -392,7 +392,7 @@ static int autofs4_revalidate(struct dentry * dentry, struct nameidata *nd)
        /* Pending dentry */
        if (autofs4_ispending(dentry)) {
                if (!oz_mode)
-                       status = try_to_fill_dentry(dentry, dir->i_sb, sbi, flags);
+                       status = try_to_fill_dentry(nd->mnt, dentry, flags);
                return status;
        }
 
@@ -409,14 +409,14 @@ static int autofs4_revalidate(struct dentry * dentry, struct nameidata *nd)
                         dentry, dentry->d_name.len, dentry->d_name.name);
                spin_unlock(&dcache_lock);
                if (!oz_mode)
-                       status = try_to_fill_dentry(dentry, dir->i_sb, sbi, flags);
+                       status = try_to_fill_dentry(nd->mnt, dentry, flags);
                return status;
        }
        spin_unlock(&dcache_lock);
 
        /* Update the usage list */
        if (!oz_mode)
-               autofs4_update_usage(dentry);
+               autofs4_update_usage(nd->mnt, dentry);
 
        return 1;
 }