Commit 7be6d991 authored by André Goddard Rosa's avatar André Goddard Rosa Committed by Linus Torvalds

pid: tighten pidmap spinlock critical section by removing kfree()

Avoid calling kfree() under pidmap spinlock, calling it afterwards.

Normally kfree() is fast, but sometimes it can be slow, so avoid
calling it under the spinlock if we can do it.
Signed-off-by: default avatarAndré Goddard Rosa <andre.goddard@gmail.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 698ba7b5
...@@ -141,11 +141,12 @@ static int alloc_pidmap(struct pid_namespace *pid_ns) ...@@ -141,11 +141,12 @@ static int alloc_pidmap(struct pid_namespace *pid_ns)
* installing it: * installing it:
*/ */
spin_lock_irq(&pidmap_lock); spin_lock_irq(&pidmap_lock);
if (map->page) if (!map->page) {
kfree(page);
else
map->page = page; map->page = page;
page = NULL;
}
spin_unlock_irq(&pidmap_lock); spin_unlock_irq(&pidmap_lock);
kfree(page);
if (unlikely(!map->page)) if (unlikely(!map->page))
break; break;
} }
......
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