mirror of https://github.com/torvalds/linux.git
convert fuse_ctl
objects are created in fuse_ctl_add_dentry() by d_alloc_name()+d_add(), removed by simple_remove_by_name(). What we return is a borrowed reference - it is valid until the call of fuse_ctl_remove_conn() and we depend upon the exclusion (on fuse_mutex) for safety. Return value is used only within the caller (fuse_ctl_add_conn()). Replace d_add() with d_make_persistent() + dput(). dput() is paired with d_alloc_name() and return value is the result of d_make_persistent(). Acked-by: Miklos Szeredi <mszeredi@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ae1fde9038
commit
5a8993a15a
|
|
@ -236,8 +236,14 @@ static struct dentry *fuse_ctl_add_dentry(struct dentry *parent,
|
|||
inc_nlink(inode);
|
||||
}
|
||||
inode->i_private = fc;
|
||||
d_add(dentry, inode);
|
||||
d_make_persistent(dentry, inode);
|
||||
dput(dentry);
|
||||
|
||||
/*
|
||||
* We are returning a borrowed reference here - it's only good while
|
||||
* fuse_mutex is held. Actually it's d_make_persistent() return
|
||||
* value...
|
||||
*/
|
||||
return dentry;
|
||||
}
|
||||
|
||||
|
|
@ -346,7 +352,7 @@ static void fuse_ctl_kill_sb(struct super_block *sb)
|
|||
fuse_control_sb = NULL;
|
||||
mutex_unlock(&fuse_mutex);
|
||||
|
||||
kill_litter_super(sb);
|
||||
kill_anon_super(sb);
|
||||
}
|
||||
|
||||
static struct file_system_type fuse_ctl_fs_type = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue