autofs4: clean ->d_release() and autofs4_free_ino() up
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 17 Jan 2011 02:42:32 +0000 (21:42 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Jan 2011 06:21:29 +0000 (01:21 -0500)
The latter is called only when both ino and dentry are about to
be freed, so cleaning ->d_fsdata and ->dentry is pointless.

Acked-by: Ian Kent <raven@themaw.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/autofs4/autofs_i.h
fs/autofs4/inode.c
fs/autofs4/root.c

index bfa0c6e542f265b15a975f7f61947302e310a2e8..54f9237927288bd43d629156ddbd7a77532a9d48 100644 (file)
@@ -338,5 +338,4 @@ static inline void autofs4_del_expiring(struct dentry *dentry)
        return;
 }
 
-void autofs4_dentry_release(struct dentry *);
 extern void autofs4_kill_sb(struct super_block *);
index 0df0c7c46fa27bfc34297c310cb0884f213c95c6..180fa2425e49310e9674a227c13297a1718f53fa 100644 (file)
@@ -43,10 +43,6 @@ void autofs4_clean_ino(struct autofs_info *ino)
 
 void autofs4_free_ino(struct autofs_info *ino)
 {
-       if (ino->dentry) {
-               ino->dentry->d_fsdata = NULL;
-               ino->dentry = NULL;
-       }
        kfree(ino);
 }
 
index f7c97c084c1f8e9be51728b2a13bdb044f04a15d..014e7aba3b08dcb6fe4a9395d2ec513d91ad4205 100644 (file)
@@ -37,6 +37,7 @@ static int autofs4_dir_open(struct inode *inode, struct file *file);
 static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
 static struct vfsmount *autofs4_d_automount(struct path *);
 static int autofs4_d_manage(struct dentry *, bool, bool);
+static void autofs4_dentry_release(struct dentry *);
 
 const struct file_operations autofs4_root_operations = {
        .open           = dcache_dir_open,
@@ -138,25 +139,26 @@ out:
        return dcache_dir_open(inode, file);
 }
 
-void autofs4_dentry_release(struct dentry *de)
+static void autofs4_dentry_release(struct dentry *de)
 {
-       struct autofs_info *inf;
+       struct autofs_info *ino = autofs4_dentry_ino(de);
+       struct autofs_sb_info *sbi = autofs4_sbi(de->d_sb);
 
        DPRINTK("releasing %p", de);
 
-       inf = autofs4_dentry_ino(de);
-       if (inf) {
-               struct autofs_sb_info *sbi = autofs4_sbi(de->d_sb);
-               if (sbi) {
-                       spin_lock(&sbi->lookup_lock);
-                       if (!list_empty(&inf->active))
-                               list_del(&inf->active);
-                       if (!list_empty(&inf->expiring))
-                               list_del(&inf->expiring);
-                       spin_unlock(&sbi->lookup_lock);
-               }
-               autofs4_free_ino(inf);
+       if (!ino)
+               return;
+
+       if (sbi) {
+               spin_lock(&sbi->lookup_lock);
+               if (!list_empty(&ino->active))
+                       list_del(&ino->active);
+               if (!list_empty(&ino->expiring))
+                       list_del(&ino->expiring);
+               spin_unlock(&sbi->lookup_lock);
        }
+
+       autofs4_free_ino(ino);
 }
 
 static struct dentry *autofs4_lookup_active(struct dentry *dentry)