switch 9p
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 12 Jan 2011 22:10:55 +0000 (17:10 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 13 Jan 2011 01:03:43 +0000 (20:03 -0500)
here we actually *want* ->d_op for root; setting it allows to get rid
of kludge in v9fs_kill_super() since now we have proper ->d_release()
for root and don't need to call it manually.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/9p/v9fs_vfs.h
fs/9p/vfs_dentry.c
fs/9p/vfs_inode.c
fs/9p/vfs_super.c

index bab0eac..b789f8e 100644 (file)
@@ -59,7 +59,6 @@ void v9fs_stat2inode_dotl(struct p9_stat_dotl *, struct inode *);
 int v9fs_dir_release(struct inode *inode, struct file *filp);
 int v9fs_file_open(struct inode *inode, struct file *file);
 void v9fs_inode2stat(struct inode *inode, struct p9_wstat *stat);
-void v9fs_dentry_release(struct dentry *);
 int v9fs_uflags2omode(int uflags, int extended);
 
 ssize_t v9fs_file_readn(struct file *, char *, char __user *, u32, u64);
index 466d2a4..233b7d4 100644 (file)
@@ -86,7 +86,7 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry)
  *
  */
 
-void v9fs_dentry_release(struct dentry *dentry)
+static void v9fs_dentry_release(struct dentry *dentry)
 {
        struct v9fs_dentry *dent;
        struct p9_fid *temp, *current_fid;
index 5076eeb..b76a40b 100644 (file)
@@ -699,11 +699,6 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
                goto error_iput;
 
 inst_out:
-       if (v9ses->cache)
-               d_set_d_op(dentry, &v9fs_cached_dentry_operations);
-       else
-               d_set_d_op(dentry, &v9fs_dentry_operations);
-
        d_add(dentry, inode);
        return NULL;
 
index c55c614..dbaabe3 100644 (file)
@@ -141,6 +141,11 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
        }
        v9fs_fill_super(sb, v9ses, flags, data);
 
+       if (v9ses->cache)
+               sb->s_d_op = &v9fs_cached_dentry_operations;
+       else
+               sb->s_d_op = &v9fs_dentry_operations;
+
        inode = v9fs_get_inode(sb, S_IFDIR | mode);
        if (IS_ERR(inode)) {
                retval = PTR_ERR(inode);
@@ -217,9 +222,6 @@ static void v9fs_kill_super(struct super_block *s)
 
        P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s);
 
-       if (s->s_root)
-               v9fs_dentry_release(s->s_root); /* clunk root */
-
        kill_anon_super(s);
 
        v9fs_session_cancel(v9ses);