diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/tiny-shmem.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/mm/tiny-shmem.c b/mm/tiny-shmem.c index ae532f501943..d17cb6f6ab10 100644 --- a/mm/tiny-shmem.c +++ b/mm/tiny-shmem.c | |||
@@ -65,31 +65,25 @@ struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags) | |||
65 | if (!dentry) | 65 | if (!dentry) |
66 | goto put_memory; | 66 | goto put_memory; |
67 | 67 | ||
68 | error = -ENOSPC; | ||
69 | inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0); | ||
70 | if (!inode) | ||
71 | goto put_dentry; | ||
72 | |||
73 | d_instantiate(dentry, inode); | ||
74 | error = -ENFILE; | 68 | error = -ENFILE; |
75 | file = alloc_file(shm_mnt, dentry, FMODE_WRITE | FMODE_READ, | 69 | file = get_empty_filp(); |
76 | &ramfs_file_operations); | ||
77 | if (!file) | 70 | if (!file) |
78 | goto put_dentry; | 71 | goto put_dentry; |
79 | 72 | ||
80 | inode->i_nlink = 0; /* It is unlinked */ | 73 | error = -ENOSPC; |
81 | 74 | inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0); | |
82 | /* notify everyone as to the change of file size */ | 75 | if (!inode) |
83 | error = do_truncate(dentry, size, 0, file); | ||
84 | if (error < 0) | ||
85 | goto close_file; | 76 | goto close_file; |
86 | 77 | ||
78 | d_instantiate(dentry, inode); | ||
79 | inode->i_size = size; | ||
80 | inode->i_nlink = 0; /* It is unlinked */ | ||
81 | init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ, | ||
82 | &ramfs_file_operations); | ||
87 | return file; | 83 | return file; |
88 | 84 | ||
89 | close_file: | 85 | close_file: |
90 | put_filp(file); | 86 | put_filp(file); |
91 | return ERR_PTR(error); | ||
92 | |||
93 | put_dentry: | 87 | put_dentry: |
94 | dput(dentry); | 88 | dput(dentry); |
95 | put_memory: | 89 | put_memory: |