aboutsummaryrefslogtreecommitdiffstats
path: root/mm/shmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/shmem.c')
-rw-r--r--mm/shmem.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/mm/shmem.c b/mm/shmem.c
index db2c9e8d9909..1f7aeb210c7b 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -666,6 +666,7 @@ static void shmem_delete_inode(struct inode *inode)
666 struct shmem_inode_info *info = SHMEM_I(inode); 666 struct shmem_inode_info *info = SHMEM_I(inode);
667 667
668 if (inode->i_op->truncate == shmem_truncate) { 668 if (inode->i_op->truncate == shmem_truncate) {
669 truncate_inode_pages(inode->i_mapping, 0);
669 shmem_unacct_size(info->flags, inode->i_size); 670 shmem_unacct_size(info->flags, inode->i_size);
670 inode->i_size = 0; 671 inode->i_size = 0;
671 shmem_truncate(inode); 672 shmem_truncate(inode);
@@ -1607,6 +1608,15 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
1607 int error = -ENOSPC; 1608 int error = -ENOSPC;
1608 1609
1609 if (inode) { 1610 if (inode) {
1611 error = security_inode_init_security(inode, dir, NULL, NULL,
1612 NULL);
1613 if (error) {
1614 if (error != -EOPNOTSUPP) {
1615 iput(inode);
1616 return error;
1617 }
1618 error = 0;
1619 }
1610 if (dir->i_mode & S_ISGID) { 1620 if (dir->i_mode & S_ISGID) {
1611 inode->i_gid = dir->i_gid; 1621 inode->i_gid = dir->i_gid;
1612 if (S_ISDIR(mode)) 1622 if (S_ISDIR(mode))
@@ -1616,7 +1626,6 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
1616 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 1626 dir->i_ctime = dir->i_mtime = CURRENT_TIME;
1617 d_instantiate(dentry, inode); 1627 d_instantiate(dentry, inode);
1618 dget(dentry); /* Extra count - pin the dentry in core */ 1628 dget(dentry); /* Extra count - pin the dentry in core */
1619 error = 0;
1620 } 1629 }
1621 return error; 1630 return error;
1622} 1631}
@@ -1746,6 +1755,16 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
1746 if (!inode) 1755 if (!inode)
1747 return -ENOSPC; 1756 return -ENOSPC;
1748 1757
1758 error = security_inode_init_security(inode, dir, NULL, NULL,
1759 NULL);
1760 if (error) {
1761 if (error != -EOPNOTSUPP) {
1762 iput(inode);
1763 return error;
1764 }
1765 error = 0;
1766 }
1767
1749 info = SHMEM_I(inode); 1768 info = SHMEM_I(inode);
1750 inode->i_size = len-1; 1769 inode->i_size = len-1;
1751 if (len <= (char *)inode - (char *)info) { 1770 if (len <= (char *)inode - (char *)info) {