[PATCHSET 0/3] xfs: fix cpu hotplug mess

Darrick J. Wong
2023-08-24T23:22:10Z

Hi all,

Ritesh and Eric separately reported crashes in XFS's hook function for
CPU hot remove if the remove event races with a filesystem being
mounted. I also noticed via generic/650 that once in a while the log
will shut down over an apparent overrun of a transaction reservation;
this turned out to be due to CIL percpu list aggregation failing to pick
up the percpu list items from a dying CPU.

Either way, the solution here is to eliminate the need for a CPU dying
hook by using a private cpumask to track which CPUs have added to their
percpu lists directly, and iterating with that mask. This fixes the log
problems and (I think) solves a theoretical UAF bug in the inodegc code
too.

If you're going to start using this code, I strongly recommend pulling
from my git trees, which are linked below.

This has been lightly tested with fstests. Enjoy!
Comments and questions are, as always, welcome.

--D

kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=fix-percpu-lists-6.6
---
fs/xfs/xfs_icache.c | 60 ++++++++++----------------------------------
fs/xfs/xfs_icache.h | 1 -
fs/xfs/xfs_log_cil.c | 50 +++++++++++--------------------------
fs/xfs/xfs_log_priv.h | 14 ++++------
fs/xfs/xfs_mount.h | 6 +++-
fs/xfs/xfs_super.c | 55 +---------------------------------------
include/linux/cpuhotplug.h | 1 -
7 files changed, 40 insertions(+), 147 deletions(-)