Messages in this thread | | | Date | Thu, 27 Oct 2011 12:41:40 -0400 | From | Joe Korty <> | Subject | Re: [PATCH 6/4] ipc/mqueue: don't use kmalloc(KMALLOC_MAX_SIZE) |
| |
On Wed, Oct 26, 2011 at 11:37:48AM -0400, KOSAKI Motohiro wrote: > > KMALLOC_MAX_SIZE is no good threshold. It is extream high and > problematic. Unfortunately, some silly drivers depend on and > we can't change it. but any new code don't use such extream > ugly high order allocations. It bring us awful fragmentation > issue and system slowdown. > > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@gmail.com> > Cc: Doug Ledford <dledford@redhat.com> > Cc: Amerigo Wang <amwang@redhat.com> > Cc: Serge E. Hallyn <serue@us.ibm.com> > Cc: Jiri Slaby <jslaby@suse.cz> > Cc: Joe Korty <joe.korty@ccur.com> > --- > ipc/mqueue.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/ipc/mqueue.c b/ipc/mqueue.c > index 229a5fb..91ca145 100644 > --- a/ipc/mqueue.c > +++ b/ipc/mqueue.c > @@ -151,7 +151,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb, > info->attr.mq_msgsize = attr->mq_msgsize; > } > mq_msg_tblsz = info->attr.mq_maxmsg * sizeof(struct msg_msg *); > - if (mq_msg_tblsz > KMALLOC_MAX_SIZE) > + if (mq_msg_tblsz > PAGE_SIZE) > info->messages = vmalloc(mq_msg_tblsz); > else > info->messages = kmalloc(mq_msg_tblsz, GFP_KERNEL); > @@ -275,7 +275,7 @@ static void mqueue_evict_inode(struct inode *inode) > spin_lock(&info->lock); > for (i = 0; i < info->attr.mq_curmsgs; i++) > free_msg(info->messages[i]); > - if (info->attr.mq_maxmsg * sizeof(struct msg_msg *) > KMALLOC_MAX_SIZE) > + if (is_vmalloc_addr(info->messages)) > vfree(info->messages); > else > kfree(info->messages); > -- > 1.7.5.2
Acked-by: Joe Korty <joe.korty@ccur.com>
| |