Re: [PATCH] fuse: cache POSIX ACLs when setting them

Amir Goldstein <[email protected]> Wed, 1 Jul 2026 13:41:22 +0200
Newsgroups dev.linux.lists.fuse-devel,org.kernel.vger.linux-kernel
Message-ID <CAOQ4uxh0Jsa-wqXsTnroJ7W+8hspHEn8ZUrpaxi5YEOZXhCXZQ@mail.gmail.com>
On Wed, Jul 1, 2026 at 1:05 PM Luis Henriques <[email protected]> wrote:
>
> When setting an ACL in an inode we can immediately add it to the cache.
> This is a small optimisation, as currently an ACL is only added to the
> cache when reading it again, which involves an extra GETXATTR hop into
> user-space.
>
> Signed-off-by: Luis Henriques <[email protected]>
> ---
>  fs/fuse/acl.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/fs/fuse/acl.c b/fs/fuse/acl.c
> index 31fb50e16aed..c2584bb75ec7 100644
> --- a/fs/fuse/acl.c
> +++ b/fs/fuse/acl.c
> @@ -155,6 +155,8 @@ int fuse_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
>                  */
>                 forget_all_cached_acls(inode);
>                 fuse_invalidate_attr(inode);
> +               if (!ret)
> +                       set_cached_acl(inode, type, acl);

This is undoing what forget_all_cached_acls() explicitly tries to do.
I think the reason is that kernel code cannot assume the server did
not modify ACL before storing them, not sure, but NFS does the same thing
with nfs_zap_acl_cache().

Thanks,
Amir.