shm: optimize locking and ipc_namespace getting
authorVasiliy Kulikov <segoon@openwall.com>
Thu, 28 Jul 2011 23:56:40 +0000 (03:56 +0400)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Jul 2011 18:44:20 +0000 (08:44 -1000)
commit4c677e2eefdba9c5bfc4474e2e91b26ae8458a1d
treec3c81703d022e0c3c43ddffc3ae165eb25aa0b1d
parent5774ed014f02120db9a6945a1ecebeb97c2acccb
shm: optimize locking and ipc_namespace getting

shm_lock() does a lookup of shm segment in shm_ids(ns).ipcs_idr, which
is redundant as we already know shmid_kernel address.  An actual lock is
also not required for reads until we really want to destroy the segment.

exit_shm() and shm_destroy_orphaned() may avoid the loop by checking
whether there is at least one segment in current ipc_namespace.

The check of nsproxy and ipc_ns against NULL is redundant as exit_shm()
is called from do_exit() before the call to exit_notify(), so the
dereferencing current->nsproxy->ipc_ns is guaranteed to be safe.

Reported-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
ipc/shm.c