[PATCH 1/2] pid: tighten pidmap spinlock critical section by removing kfree()

André Goddard Rosa
2009-11-22T12:18:23Z

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

Normally kfree() is very fast, but sometimes it can be slow, so avoid
calling it under the spinlock if we can.

Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
cc: Pekka Enberg <penberg@cs.helsinki.fi>
---
kernel/pid.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/pid.c b/kernel/pid.c
index d3f722d..55fd590 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -141,11 +141,12 @@ static int alloc_pidmap(struct pid_namespace *pid_ns)
* installing it:
*/
spin_lock_irq(&pidmap_lock);
- if (map->page)
- kfree(page);
- else
+ if (!map->page) {
map->page = page;
+ page = NULL;
+ }
spin_unlock_irq(&pidmap_lock);
+ kfree(page);
if (unlikely(!map->page))
break;
}
--
1.6.5.3.298.g39add