Auke Kok c9c428589d Switch to .get_inode_acl() to avoid rcu corruption.
In el9.6, the kernel VFS no longer goes through xattr handlers to
retreive ACLs, but instead goes through the inode ops .get_acl, or,
alternatively, .get_inode_acl.

When I initially implemented the compatibility, I opted to implement
.get_acl as the interface was simpler. Unfortunately, using .get_acl has
the side effect that permission checking may rcu the acl as we're
traversing a chain of directories, causing a cold cache traversal of
nested directories to "lose" acl entries, as the traversal of
directories requires permission checks on each of the steps, and that
clashes with the getacl(1) lookup. The added test case exposes this
issue.

We can opt to implement our own sentinel, as some fs drivers have done.
The alternative is to follow the path that all the other fs drivers have
done, which is to implement .get_inode_acl, which is already guarded by
a sentinel by the VFS, and can be explicitly told to not be called in
rcu.

To complete this, we're changing KC_GET_ACL_DENTRY, which is no longer
used to KC_SET_ACL_DENTRY which was previously tacked on for the set_acl
vfs parameter change from inode to dentry.

Signed-off-by: Auke Kok <auke.kok@versity.com>
2026-01-26 10:14:04 -08:00
2020-12-07 09:47:12 -08:00
2020-12-07 10:39:20 -08:00
2021-11-05 11:16:57 -07:00
2026-01-15 14:21:53 -08:00

Introduction

scoutfs is a clustered in-kernel Linux filesystem designed to support large archival systems. It features additional interfaces and metadata so that archive agents can perform their maintenance workflows without walking all the files in the namespace. Its cluster support lets deployments add nodes to satisfy archival tier bandwidth targets.

The design goal is to reach file populations in the trillions, with the archival bandwidth to match, while remaining operational and responsive.

Highlights of the design and implementation include:

  • Fully consistent POSIX semantics between nodes
  • Atomic transactions to maintain consistent persistent structures
  • Integrated archival metadata replaces syncing to external databases
  • Dynamic seperation of resources lets nodes write in parallel
  • 64bit throughout; no limits on file or directory sizes or counts
  • Open GPLv2 implementation

Community Mailing List

Please join us on the open scoutfs-devel@scoutfs.org mailing list hosted on Google Groups

Description
No description provided
Readme 8 MiB
Languages
C 87%
Shell 9.3%
Roff 2.5%
TeX 0.8%
Makefile 0.4%