|
@@ -65,31 +65,25 @@ struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags)
|
|
|
if (!dentry)
|
|
|
goto put_memory;
|
|
|
|
|
|
- error = -ENOSPC;
|
|
|
- inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0);
|
|
|
- if (!inode)
|
|
|
- goto put_dentry;
|
|
|
-
|
|
|
- d_instantiate(dentry, inode);
|
|
|
error = -ENFILE;
|
|
|
- file = alloc_file(shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
|
|
|
- &ramfs_file_operations);
|
|
|
+ file = get_empty_filp();
|
|
|
if (!file)
|
|
|
goto put_dentry;
|
|
|
|
|
|
- inode->i_nlink = 0; /* It is unlinked */
|
|
|
-
|
|
|
- /* notify everyone as to the change of file size */
|
|
|
- error = do_truncate(dentry, size, 0, file);
|
|
|
- if (error < 0)
|
|
|
+ error = -ENOSPC;
|
|
|
+ inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0);
|
|
|
+ if (!inode)
|
|
|
goto close_file;
|
|
|
|
|
|
+ d_instantiate(dentry, inode);
|
|
|
+ inode->i_size = size;
|
|
|
+ inode->i_nlink = 0; /* It is unlinked */
|
|
|
+ init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
|
|
|
+ &ramfs_file_operations);
|
|
|
return file;
|
|
|
|
|
|
close_file:
|
|
|
put_filp(file);
|
|
|
- return ERR_PTR(error);
|
|
|
-
|
|
|
put_dentry:
|
|
|
dput(dentry);
|
|
|
put_memory:
|