Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -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;
		}
		}