On Fri, Feb 6, 2026 at 5:19 PM Waiman Long <[email protected]> wrote:
>
>  v3:
>   - Add a new counter in fs_struct to track # of additional references
>     to pwd and add a new get_fs_pwd_pool() and put_fs_pwd_pool helpers
>     to use the new counter.
>   - Make audit use the new helpers instead of storing pwd reference
>     internally.
>
>  v2: https://lore.kernel.org/lkml/[email protected]/
>
> When the audit subsystem is enabled, it can do a lot of get_fs_pwd()
> calls to get references to fs->pwd and then releasing those references
> back with path_put() later. That may cause a lot of spinlock contention
> on a single pwd's dentry lock because of the constant changes to the
> reference count when there are many processes on the same working
> directory actively doing open/close system calls. This can cause
> noticeable performance regresssion when compared with the case where
> the audit subsystem is turned off especially on systems with a lot of
> CPUs which is becoming more common these days.
>
> This patch series aim to avoid this type of performance regression caused
> by audit by adding a new set of fs_struct helpers to reduce unncessary
> path_get() and path_put() calls and the audit code is modified to use
> these new helpers.
>
> Waiman Long (2):
>   fs: Add a pool of extra fs->pwd references to fs_struct
>   audit: Use the new {get,put}_fs_pwd_pool() APIs to get/put pwd
>     references
>
>  fs/fs_struct.c            | 26 +++++++++++++++++++++-----
>  fs/namespace.c            |  8 ++++++++
>  include/linux/fs_struct.h | 30 +++++++++++++++++++++++++++++-
>  kernel/auditsc.c          |  7 +++++--
>  4 files changed, 63 insertions(+), 8 deletions(-)
>
> --
> 2.52.0
>

Looks good to me. I ran a local kernel build against the
audit-testsuite and verified there are no noticeable audit functional
regressions.

Reviewed-by: Ricardo Robaina <[email protected]>
Tested-by: Ricardo Robaina <[email protected]>

# uname -r
6.19.0+

# make test
Running as   user    root
        with context unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
        on   system  Fedora

amcast_joinpart/test ................. ok
backlog_wait_time_actual_reset/test .. ok
bpf/test ............................. ok
exec_execve/test ..................... ok
exec_name/test ....................... ok
fanotify/test ........................ ok
field_compare/test ................... ok
file_create/test ..................... ok
file_delete/test ..................... ok
file_permission/test ................. ok
file_rename/test ..................... ok
filter_exclude/test .................. ok
filter_exit/test ..................... ok
filter_saddr_fam/test ................ ok
filter_sessionid/test ................ ok
io_uring/test ........................ ok
login_tty/test ....................... ok
lost_reset/test ...................... ok
netfilter_pkt/test ................... ok
signal/test .......................... ok
syscalls_file/test ................... ok
syscall_module/test .................. ok
syscall_socketcall/test .............. ok
time_change/test ..................... ok
user_msg/test ........................ ok
All tests successful.
Files=25, Tests=282, 70 wallclock secs ( 0.09 usr  0.01 sys + 18.61
cusr  1.47 csys = 20.18 CPU)
Result: PASS


Reply via email to