Commit 7be6d991bca63bbcdc5bc3b09789f367a3486537

Authored by André Goddard Rosa
Committed by Linus Torvalds
1 parent 698ba7b5a3

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

... ... @@ -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 }