aboutsummaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-12-01 17:26:05 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2018-01-05 11:54:33 -0500
commiteecec19d9e705cb670a387d18973feeffd412970 (patch)
tree6e8c97fde46449921c819c8c8ecd1588bbec4ae6 /ipc
parenta4a0683fd5e64e029421a465525352f01d57f27a (diff)
mqueue: switch to vfs_mkobj(), quit abusing ->d_fsdata
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'ipc')
-rw-r--r--ipc/mqueue.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index 9649ecd8a73a..e011ccd4c798 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -416,11 +416,11 @@ static void mqueue_evict_inode(struct inode *inode)
416 put_ipc_ns(ipc_ns); 416 put_ipc_ns(ipc_ns);
417} 417}
418 418
419static int mqueue_create(struct inode *dir, struct dentry *dentry, 419static int mqueue_create_attr(struct dentry *dentry, umode_t mode, void *arg)
420 umode_t mode, bool excl)
421{ 420{
421 struct inode *dir = dentry->d_parent->d_inode;
422 struct inode *inode; 422 struct inode *inode;
423 struct mq_attr *attr = dentry->d_fsdata; 423 struct mq_attr *attr = arg;
424 int error; 424 int error;
425 struct ipc_namespace *ipc_ns; 425 struct ipc_namespace *ipc_ns;
426 426
@@ -461,6 +461,12 @@ out_unlock:
461 return error; 461 return error;
462} 462}
463 463
464static int mqueue_create(struct inode *dir, struct dentry *dentry,
465 umode_t mode, bool excl)
466{
467 return mqueue_create_attr(dentry, mode, NULL);
468}
469
464static int mqueue_unlink(struct inode *dir, struct dentry *dentry) 470static int mqueue_unlink(struct inode *dir, struct dentry *dentry)
465{ 471{
466 struct inode *inode = d_inode(dentry); 472 struct inode *inode = d_inode(dentry);
@@ -732,8 +738,6 @@ static struct file *do_create(struct ipc_namespace *ipc_ns, struct inode *dir,
732 ret = mq_attr_ok(ipc_ns, attr); 738 ret = mq_attr_ok(ipc_ns, attr);
733 if (ret) 739 if (ret)
734 return ERR_PTR(ret); 740 return ERR_PTR(ret);
735 /* store for use during create */
736 path->dentry->d_fsdata = attr;
737 } else { 741 } else {
738 struct mq_attr def_attr; 742 struct mq_attr def_attr;
739 743
@@ -746,9 +750,8 @@ static struct file *do_create(struct ipc_namespace *ipc_ns, struct inode *dir,
746 return ERR_PTR(ret); 750 return ERR_PTR(ret);
747 } 751 }
748 752
749 mode &= ~current_umask(); 753 ret = vfs_mkobj(path->dentry, mode & ~current_umask(),
750 ret = vfs_create(dir, path->dentry, mode, true); 754 mqueue_create_attr, attr);
751 path->dentry->d_fsdata = NULL;
752 if (ret) 755 if (ret)
753 return ERR_PTR(ret); 756 return ERR_PTR(ret);
754 return dentry_open(path, oflag, cred); 757 return dentry_open(path, oflag, cred);