Commit 298507d4 authored by Vasiliy Kulikov's avatar Vasiliy Kulikov Committed by Linus Torvalds

shm: optimize exit_shm()

We may optimistically check .in_use == 0 without holding the rw_mutex:
it's the common case, and if it's zero, there certainly won't be any
segments associated with us.

After taking the lock, the idr_for_each() will do the right thing, so we
could now drop the re-check inside the lock without any real cost.  But
it won't hurt.
Signed-off-by: default avatarVasiliy Kulikov <segoon@openwall.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 33a30ed4
...@@ -304,6 +304,9 @@ void exit_shm(struct task_struct *task) ...@@ -304,6 +304,9 @@ void exit_shm(struct task_struct *task)
{ {
struct ipc_namespace *ns = task->nsproxy->ipc_ns; struct ipc_namespace *ns = task->nsproxy->ipc_ns;
if (shm_ids(ns).in_use == 0)
return;
/* Destroy all already created segments, but not mapped yet */ /* Destroy all already created segments, but not mapped yet */
down_write(&shm_ids(ns).rw_mutex); down_write(&shm_ids(ns).rw_mutex);
if (shm_ids(ns).in_use) if (shm_ids(ns).in_use)
......
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