Commit c8308b1c authored by André Goddard Rosa's avatar André Goddard Rosa Committed by Al Viro

mqueue: remove unneeded info->messages initialization

... and abort earlier if we couldn't allocate the message pointers array,
avoiding the u->mq_bytes accounting logic.

It reduces code size:
   text    data     bss     dec     hex filename
   9949      72      16   10037    2735 ipc/mqueue-BEFORE.o
   9941      72      16   10029    272d ipc/mqueue-AFTER.o
Signed-off-by: default avatarAndré Goddard Rosa <andre.goddard@gmail.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 4294a8ee
...@@ -134,7 +134,6 @@ static struct inode *mqueue_get_inode(struct super_block *sb, ...@@ -134,7 +134,6 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
init_waitqueue_head(&info->wait_q); init_waitqueue_head(&info->wait_q);
INIT_LIST_HEAD(&info->e_wait_q[0].list); INIT_LIST_HEAD(&info->e_wait_q[0].list);
INIT_LIST_HEAD(&info->e_wait_q[1].list); INIT_LIST_HEAD(&info->e_wait_q[1].list);
info->messages = NULL;
info->notify_owner = NULL; info->notify_owner = NULL;
info->qsize = 0; info->qsize = 0;
info->user = NULL; /* set when all is ok */ info->user = NULL; /* set when all is ok */
...@@ -146,6 +145,10 @@ static struct inode *mqueue_get_inode(struct super_block *sb, ...@@ -146,6 +145,10 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
info->attr.mq_msgsize = attr->mq_msgsize; info->attr.mq_msgsize = attr->mq_msgsize;
} }
mq_msg_tblsz = info->attr.mq_maxmsg * sizeof(struct msg_msg *); mq_msg_tblsz = info->attr.mq_maxmsg * sizeof(struct msg_msg *);
info->messages = kmalloc(mq_msg_tblsz, GFP_KERNEL);
if (!info->messages)
goto out_inode;
mq_bytes = (mq_msg_tblsz + mq_bytes = (mq_msg_tblsz +
(info->attr.mq_maxmsg * info->attr.mq_msgsize)); (info->attr.mq_maxmsg * info->attr.mq_msgsize));
...@@ -154,18 +157,12 @@ static struct inode *mqueue_get_inode(struct super_block *sb, ...@@ -154,18 +157,12 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
u->mq_bytes + mq_bytes > u->mq_bytes + mq_bytes >
p->signal->rlim[RLIMIT_MSGQUEUE].rlim_cur) { p->signal->rlim[RLIMIT_MSGQUEUE].rlim_cur) {
spin_unlock(&mq_lock); spin_unlock(&mq_lock);
kfree(info->messages);
goto out_inode; goto out_inode;
} }
u->mq_bytes += mq_bytes; u->mq_bytes += mq_bytes;
spin_unlock(&mq_lock); spin_unlock(&mq_lock);
info->messages = kmalloc(mq_msg_tblsz, GFP_KERNEL);
if (!info->messages) {
spin_lock(&mq_lock);
u->mq_bytes -= mq_bytes;
spin_unlock(&mq_lock);
goto out_inode;
}
/* all is ok */ /* all is ok */
info->user = get_uid(u); info->user = get_uid(u);
} else if (S_ISDIR(mode)) { } else if (S_ISDIR(mode)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment