Messages in this thread Patch in this message | | | Date | Wed, 3 Aug 2011 22:28:26 +0400 | From | Vasiliy Kulikov <> | Subject | [PATCH] shm: optimize exit_shm() |
| |
We may check .in_use == 0 without holding the rw_mutex as .in_use is int and reads of ints are atomic. As .in_use may be changed to zero while current process was sleeping in down_write(), we should check .in_use once again after down_write().
Signed-off-by: Vasiliy Kulikov <segoon@openwall.com> --- ipc/shm.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/ipc/shm.c b/ipc/shm.c index 4e3c883..855ddc0 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -304,6 +304,9 @@ void exit_shm(struct task_struct *task) { 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 */ down_write(&shm_ids(ns).rw_mutex); if (shm_ids(ns).in_use) -- 1.7.0.4
| |