have spufs_new_file() use d_make_persistent() instead of d_add() and
do an uncondition dput() in the caller; the rest is completely
straightforward.

Signed-off-by: Al Viro <v...@zeniv.linux.org.uk>
---
 arch/powerpc/platforms/cell/spufs/inode.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/inode.c 
b/arch/powerpc/platforms/cell/spufs/inode.c
index 7ec60290abe6..f21f7a76ef0b 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -127,7 +127,7 @@ spufs_new_file(struct super_block *sb, struct dentry 
*dentry,
        inode->i_fop = fops;
        inode->i_size = size;
        inode->i_private = SPUFS_I(inode)->i_ctx = get_spu_context(ctx);
-       d_add(dentry, inode);
+       d_make_persistent(dentry, inode);
 out:
        return ret;
 }
@@ -163,10 +163,9 @@ static int spufs_fill_dir(struct dentry *dir,
                        return -ENOMEM;
                ret = spufs_new_file(dir->d_sb, dentry, files->ops,
                                        files->mode & mode, files->size, ctx);
-               if (ret) {
-                       dput(dentry);
+               dput(dentry);
+               if (ret)
                        return ret;
-               }
                files++;
        }
        return 0;
@@ -241,11 +240,10 @@ spufs_mkdir(struct inode *dir, struct dentry *dentry, 
unsigned int flags,
 
        inode_lock(inode);
 
-       dget(dentry);
        inc_nlink(dir);
        inc_nlink(inode);
 
-       d_instantiate(dentry, inode);
+       d_make_persistent(dentry, inode);
 
        if (flags & SPU_CREATE_NOSCHED)
                ret = spufs_fill_dir(dentry, spufs_dir_nosched_contents,
@@ -479,10 +477,9 @@ spufs_mkgang(struct inode *dir, struct dentry *dentry, 
umode_t mode)
        inode->i_op = &simple_dir_inode_operations;
        inode->i_fop = &simple_dir_operations;
 
-       d_instantiate(dentry, inode);
-       dget(dentry);
        inc_nlink(dir);
        inc_nlink(d_inode(dentry));
+       d_make_persistent(dentry, inode);
        return ret;
 
 out_iput:
@@ -780,7 +777,7 @@ static struct file_system_type spufs_type = {
        .name = "spufs",
        .init_fs_context = spufs_init_fs_context,
        .parameters     = spufs_fs_parameters,
-       .kill_sb = kill_litter_super,
+       .kill_sb = kill_anon_super,
 };
 MODULE_ALIAS_FS("spufs");
 
-- 
2.47.3


Reply via email to