Commit 5a8993a1 authored by Al Viro's avatar Al Viro
Browse files

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: default avatarMiklos Szeredi <mszeredi@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ae1fde90
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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 = {