From: KAMEZAWA Hiroyuki on 15 Mar 2010 20:10 On Mon, 15 Mar 2010 14:54:20 -0700 Andrew Morton <akpm(a)linux-foundation.org> wrote: > On Fri, 12 Mar 2010 14:34:35 +0900 > KAMEZAWA Hiroyuki <kamezawa.hiroyu(a)jp.fujitsu.com> wrote: > > > +static int mem_cgroup_oom_register_event(struct cgroup *cgrp, > > + struct cftype *cft, struct eventfd_ctx *eventfd, const char *args) > > +{ > > + struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + struct mem_cgroup_eventfd_list *event; > > + int type = MEMFILE_TYPE(cft->private); > > + int ret = -ENOMEM; > > + > > + BUG_ON(type != _OOM_TYPE); > > + > > + mutex_lock(&memcg_oom_mutex); > > + > > + event = kmalloc(sizeof(*event), GFP_KERNEL); > > + if (!event) > > + goto unlock; > > + > > + event->eventfd = eventfd; > > + list_add(&event->list, &memcg->oom_notify); > > + > > + /* already in OOM ? */ > > + if (atomic_read(&memcg->oom_lock)) > > + eventfd_signal(eventfd, 1); > > + ret = 0; > > +unlock: > > + mutex_unlock(&memcg_oom_mutex); > > + > > + return ret; > > +} > > We can move that kmalloc() outside the lock. It's more scalable and the > code's cleaner. > Agreed. Thank you for pointing out. -Kame > --- a/mm/memcontrol.c~memcg-oom-notifier-fix > +++ a/mm/memcontrol.c > @@ -3603,27 +3603,23 @@ static int mem_cgroup_oom_register_event > struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > struct mem_cgroup_eventfd_list *event; > int type = MEMFILE_TYPE(cft->private); > - int ret = -ENOMEM; > > BUG_ON(type != _OOM_TYPE); > > - mutex_lock(&memcg_oom_mutex); > - > event = kmalloc(sizeof(*event), GFP_KERNEL); > if (!event) > - goto unlock; > + return -ENOMEM; > > + mutex_lock(&memcg_oom_mutex); > event->eventfd = eventfd; > list_add(&event->list, &memcg->oom_notify); > > /* already in OOM ? */ > if (atomic_read(&memcg->oom_lock)) > eventfd_signal(eventfd, 1); > - ret = 0; > -unlock: > mutex_unlock(&memcg_oom_mutex); > > - return ret; > + return 0; > } > > static int mem_cgroup_oom_unregister_event(struct cgroup *cgrp, > _ > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
First
|
Prev
|
Pages: 1 2 Prev: Failed to alloc 4M DMA memory in the 256M system Next: [PATCH 2/4] x86: make 820 to be static |