mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
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: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user