Cache user_ns in struct cred
authorSerge E. Hallyn <serge.hallyn@canonical.com>
Fri, 13 May 2011 03:27:54 +0000 (04:27 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 13 May 2011 18:45:33 +0000 (11:45 -0700)
commit47a150edc2ae734c0f4bf50aa19499e23b9a46f8
treebeeba9befd531285f663559a76f6f0f7378a6c2b
parent381e7863d94891035a1a6b7836e9db72f9f1cba1
Cache user_ns in struct cred

If !CONFIG_USERNS, have current_user_ns() defined to (&init_user_ns).

Get rid of _current_user_ns.  This requires nsown_capable() to be
defined in capability.c rather than as static inline in capability.h,
so do that.

Request_key needs init_user_ns defined at current_user_ns if
!CONFIG_USERNS, so forward-declare that in cred.h if !CONFIG_USERNS
at current_user_ns() define.

Compile-tested with and without CONFIG_USERNS.

Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
[ This makes a huge performance difference for acl_permission_check(),
  up to 30%.  And that is one of the hottest kernel functions for loads
  that are pathname-lookup heavy.  ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/capability.h
include/linux/cred.h
kernel/capability.c
kernel/cred.c