On Mon, 15 Mar 2010 14:54:20 -0700 Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > On Fri, 12 Mar 2010 14:34:35 +0900 > KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> 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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>