shmem: fix double memory uncharge on error path
Subsystems (2)
PATCH 1/1 shmem: fix double memory uncharge on error path
This patch removes erroneous call of shmem_unacct_size() from error path. Shmem inode will release that memory reservation in shmem_evict_inode(). So, if following call of alloc_file fails we'll free reservation twice.
Signed-off-by Konstantin Khlebnikov <[email protected]>
--- mm/shmem.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
mm/shmem.c +4 -4
@@ -2946,16 +2946,16 @@ struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags this.len =strlen (name); this.hash =0 ;/* will go */ sb = shm_mnt->mnt_sb; + path.mnt =mntget (shm_mnt); path.dentry =d_alloc_pseudo (sb, &this);if (!path.dentry) goto put_memory;d_set_d_op (path.dentry, &anon_ops); - path.mnt =mntget (shm_mnt); res =ERR_PTR (-ENOSPC ); inode =shmem_get_inode (sb,NULL ,S_IFREG |S_IRWXUGO ,0 , flags);if (!inode) - goto put_dentry; + goto put_memory;d_instantiate (path.dentry, inode); inode->i_size = size;
@@ -2971,10 +2971,10 @@ struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flagsreturn res; -put_dentry: -path_put (&path); put_memory:shmem_unacct_size (flags, size); +put_dentry: +path_put (&path);return res; }EXPORT_SYMBOL_GPL (shmem_file_setup);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>