aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/scrub/repair.c
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2022-07-18 18:20:37 -0700
committerDarrick J. Wong <djwong@kernel.org>2022-07-20 16:40:39 -0700
commit231f91ab504ecebcb88e942341b3d7dd91de45f1 (patch)
tree65c1e9844a43b5c0ebacacc45678bfcc9be2ee08 /fs/xfs/scrub/repair.c
parentxfs: delete unnecessary NULL checks (diff)
downloadlinux-dev-231f91ab504ecebcb88e942341b3d7dd91de45f1.tar.xz
linux-dev-231f91ab504ecebcb88e942341b3d7dd91de45f1.zip
xfs: xfs_buf cache destroy isn't RCU safe
Darrick and Sachin Sant reported that xfs/435 and xfs/436 would report an non-empty xfs_buf slab on module remove. This isn't easily to reproduce, but is clearly a side effect of converting the buffer caceh to RUC freeing and lockless lookups. Sachin bisected and Darrick hit it when testing the patchset directly. Turns out that the xfs_buf slab is not destroyed when all the other XFS slab caches are destroyed. Instead, it's got it's own little wrapper function that gets called separately, and so it doesn't have an rcu_barrier() call in it that is needed to drain all the rcu callbacks before the slab is destroyed. Fix it by removing the xfs_buf_init/terminate wrappers that just allocate and destroy the xfs_buf slab, and move them to the same place that all the other slab caches are set up and destroyed. Reported-and-tested-by: Sachin Sant <sachinp@linux.ibm.com> Fixes: 298f34224506 ("xfs: lockless buffer lookup") Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/scrub/repair.c')
0 files changed, 0 insertions, 0 deletions