Commit 7be6d991bca63bbcdc5bc3b09789f367a3486537
Committed by
Linus Torvalds
1 parent
698ba7b5a3
Exists in
master
and in
4 other branches
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: André Goddard Rosa <andre.goddard@gmail.com> Cc: Pekka Enberg <penberg@cs.helsinki.fi> Cc: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 4 additions and 3 deletions Side-by-side Diff
kernel/pid.c
... | ... | @@ -141,11 +141,12 @@ |
141 | 141 | * installing it: |
142 | 142 | */ |
143 | 143 | spin_lock_irq(&pidmap_lock); |
144 | - if (map->page) | |
145 | - kfree(page); | |
146 | - else | |
144 | + if (!map->page) { | |
147 | 145 | map->page = page; |
146 | + page = NULL; | |
147 | + } | |
148 | 148 | spin_unlock_irq(&pidmap_lock); |
149 | + kfree(page); | |
149 | 150 | if (unlikely(!map->page)) |
150 | 151 | break; |
151 | 152 | } |