aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/tiny-shmem.c24
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
89close_file: 85close_file:
90 put_filp(file); 86 put_filp(file);
91 return ERR_PTR(error);
92
93put_dentry: 87put_dentry:
94 dput(dentry); 88 dput(dentry);
95put_memory: 89put_memory: