diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2013-06-07 01:20:27 -0400 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2019-05-02 15:45:06 +0200 |
| commit | 59ea0dff75365932014b736b58afd3b425e2a9b5 (patch) | |
| tree | 3257f5646554995554458ef672d45bd73d4633b4 /mm | |
| parent | 5f26faf60ffc3a433b62b2dc5393039a35e21bf9 (diff) | |
it's still short a few helpers, but infrastructure should be OK now...
Change-Id: I0adb8fe9c5029bad3ac52629003c3b78e9442936
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/shmem.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mm/shmem.c b/mm/shmem.c index cf0047a48..f2b5cc0e2 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2074,6 +2074,37 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) return error; } +static int +shmem_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + struct inode *inode; + int error = -ENOSPC; + + inode = shmem_get_inode(dir->i_sb, dir, mode, 0, VM_NORESERVE); + if (inode) { + error = security_inode_init_security(inode, dir, + NULL, + shmem_initxattrs, NULL); + if (error) { + if (error != -EOPNOTSUPP) { + iput(inode); + return error; + } + } +#ifdef CONFIG_TMPFS_POSIX_ACL + error = generic_acl_init(inode, dir); + if (error) { + iput(inode); + return error; + } +#else + error = 0; +#endif + d_tmpfile(dentry, inode); + } + return error; +} + static int shmem_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) { int error; @@ -2834,6 +2865,7 @@ static const struct inode_operations shmem_dir_inode_operations = { .rmdir = shmem_rmdir, .mknod = shmem_mknod, .rename = shmem_rename, + .tmpfile = shmem_tmpfile, #endif #ifdef CONFIG_TMPFS_XATTR .setxattr = shmem_setxattr, |
