diff options
Diffstat (limited to 'fs/anon_inodes.c')
-rw-r--r-- | fs/anon_inodes.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c index e4b75d6eda83..57ce55b2564c 100644 --- a/fs/anon_inodes.c +++ b/fs/anon_inodes.c | |||
@@ -26,12 +26,10 @@ static struct vfsmount *anon_inode_mnt __read_mostly; | |||
26 | static struct inode *anon_inode_inode; | 26 | static struct inode *anon_inode_inode; |
27 | static const struct file_operations anon_inode_fops; | 27 | static const struct file_operations anon_inode_fops; |
28 | 28 | ||
29 | static int anon_inodefs_get_sb(struct file_system_type *fs_type, int flags, | 29 | static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type, |
30 | const char *dev_name, void *data, | 30 | int flags, const char *dev_name, void *data) |
31 | struct vfsmount *mnt) | ||
32 | { | 31 | { |
33 | return get_sb_pseudo(fs_type, "anon_inode:", NULL, ANON_INODE_FS_MAGIC, | 32 | return mount_pseudo(fs_type, "anon_inode:", NULL, ANON_INODE_FS_MAGIC); |
34 | mnt); | ||
35 | } | 33 | } |
36 | 34 | ||
37 | /* | 35 | /* |
@@ -45,7 +43,7 @@ static char *anon_inodefs_dname(struct dentry *dentry, char *buffer, int buflen) | |||
45 | 43 | ||
46 | static struct file_system_type anon_inode_fs_type = { | 44 | static struct file_system_type anon_inode_fs_type = { |
47 | .name = "anon_inodefs", | 45 | .name = "anon_inodefs", |
48 | .get_sb = anon_inodefs_get_sb, | 46 | .mount = anon_inodefs_mount, |
49 | .kill_sb = kill_anon_super, | 47 | .kill_sb = kill_anon_super, |
50 | }; | 48 | }; |
51 | static const struct dentry_operations anon_inodefs_dentry_operations = { | 49 | static const struct dentry_operations anon_inodefs_dentry_operations = { |
@@ -111,10 +109,9 @@ struct file *anon_inode_getfile(const char *name, | |||
111 | path.mnt = mntget(anon_inode_mnt); | 109 | path.mnt = mntget(anon_inode_mnt); |
112 | /* | 110 | /* |
113 | * We know the anon_inode inode count is always greater than zero, | 111 | * We know the anon_inode inode count is always greater than zero, |
114 | * so we can avoid doing an igrab() and we can use an open-coded | 112 | * so ihold() is safe. |
115 | * atomic_inc(). | ||
116 | */ | 113 | */ |
117 | atomic_inc(&anon_inode_inode->i_count); | 114 | ihold(anon_inode_inode); |
118 | 115 | ||
119 | path.dentry->d_op = &anon_inodefs_dentry_operations; | 116 | path.dentry->d_op = &anon_inodefs_dentry_operations; |
120 | d_instantiate(path.dentry, anon_inode_inode); | 117 | d_instantiate(path.dentry, anon_inode_inode); |
@@ -194,6 +191,7 @@ static struct inode *anon_inode_mkinode(void) | |||
194 | if (!inode) | 191 | if (!inode) |
195 | return ERR_PTR(-ENOMEM); | 192 | return ERR_PTR(-ENOMEM); |
196 | 193 | ||
194 | inode->i_ino = get_next_ino(); | ||
197 | inode->i_fop = &anon_inode_fops; | 195 | inode->i_fop = &anon_inode_fops; |
198 | 196 | ||
199 | inode->i_mapping->a_ops = &anon_aops; | 197 | inode->i_mapping->a_ops = &anon_aops; |