Commit 6ca67378 authored by Al Viro's avatar Al Viro
Browse files

convert functionfs



All files are regular; ep0 is there all along, other ep* may appear
and go away during the filesystem lifetime; all of those are guaranteed
to be gone by the time we umount it.

Object creation is in ffs_sb_create_file(), removals - at ->kill_sb()
time (for ep0) or by simple_remove_by_name() from ffs_epfiles_destroy()
(for the rest of them).

Switch ffs_sb_create_file() to simple_start_creating()/d_make_persistent()/
simple_done_creating() and that's it.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c7747faf
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -1899,17 +1899,18 @@ static int ffs_sb_create_file(struct super_block *sb, const char *name,
	struct dentry	*dentry;
	struct inode	*inode;

	dentry = d_alloc_name(sb->s_root, name);
	if (!dentry)
		return -ENOMEM;

	inode = ffs_sb_make_inode(sb, data, fops, NULL, &ffs->file_perms);
	if (!inode) {
		dput(dentry);
	if (!inode)
		return -ENOMEM;
	dentry = simple_start_creating(sb->s_root, name);
	if (IS_ERR(dentry)) {
		iput(inode);
		return PTR_ERR(dentry);
	}

	d_add(dentry, inode);
	d_make_persistent(dentry, inode);

	simple_done_creating(dentry);
	return 0;
}

@@ -2098,7 +2099,7 @@ static void ffs_data_reset(struct ffs_data *ffs);
static void
ffs_fs_kill_sb(struct super_block *sb)
{
	kill_litter_super(sb);
	kill_anon_super(sb);
	if (sb->s_fs_info) {
		struct ffs_data *ffs = sb->s_fs_info;
		ffs->state = FFS_CLOSING;