Skip to content

Commit

Permalink
mqueue: simplify do_open() error handling
Browse files Browse the repository at this point in the history
It reduces code size:
text    data     bss     dec     hex filename
9925      72      16   10013    271d ipc/mqueue-BEFORE.o
9885      72      16    9973    26f5 ipc/mqueue-AFTER.o

Signed-off-by: André Goddard Rosa <[email protected]>
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
andre-rosa authored and Al Viro committed Mar 3, 2010
1 parent 8834cf7 commit 04db0dd
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions ipc/mqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -657,24 +657,28 @@ static struct file *do_create(struct ipc_namespace *ipc_ns, struct dentry *dir,
static struct file *do_open(struct ipc_namespace *ipc_ns,
struct dentry *dentry, int oflag)
{
int ret;
const struct cred *cred = current_cred();

static const int oflag2acc[O_ACCMODE] = { MAY_READ, MAY_WRITE,
MAY_READ | MAY_WRITE };

if ((oflag & O_ACCMODE) == (O_RDWR | O_WRONLY)) {
dput(dentry);
mntput(ipc_ns->mq_mnt);
return ERR_PTR(-EINVAL);
ret = -EINVAL;
goto err;
}

if (inode_permission(dentry->d_inode, oflag2acc[oflag & O_ACCMODE])) {
dput(dentry);
mntput(ipc_ns->mq_mnt);
return ERR_PTR(-EACCES);
ret = -EACCES;
goto err;
}

return dentry_open(dentry, ipc_ns->mq_mnt, oflag, cred);

err:
dput(dentry);
mntput(ipc_ns->mq_mnt);
return ERR_PTR(ret);
}

SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
Expand Down

0 comments on commit 04db0dd

Please sign in to comment.