ovl: enable RCU'd ->get_acl()
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 18 Aug 2021 20:08:24 +0000 (22:08 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 18 Aug 2021 20:08:24 +0000 (22:08 +0200)
commit332f606b32b6291a944c8cf23b91f53a6e676525
treec3a46cae0901eec40dd900a9a64c8ad1e51647ba
parent0cad6246621b5887d5b33fea84219d2a71f2f99a
ovl: enable RCU'd ->get_acl()

Overlayfs does not cache ACL's (to avoid double caching).  Instead it just
calls the underlying filesystem's i_op->get_acl(), which will return the
cached value, if possible.

In rcu path walk, however, get_cached_acl_rcu() is employed to get the
value from the cache, which will fail on overlayfs resulting in dropping
out of rcu walk mode.  This can result in a big performance hit in certain
situations.

Fix by calling ->get_acl() with rcu=true in case of ACL_DONT_CACHE (which
indicates pass-through)

Reported-by: garyhuang <zjh.20052005@163.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/inode.c
fs/posix_acl.c
include/linux/fs.h
include/linux/posix_acl.h