]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: add a sick_mask to struct xfs_btree_ops
authorChristoph Hellwig <hch@lst.de>
Thu, 22 Feb 2024 20:39:47 +0000 (12:39 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:39:47 +0000 (12:39 -0800)
Clean up xfs_btree_mark_sick by adding a sick_mask to the btree-ops
for all AG-root btrees.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/libxfs/xfs_alloc_btree.c
fs/xfs/libxfs/xfs_btree.h
fs/xfs/libxfs/xfs_ialloc_btree.c
fs/xfs/libxfs/xfs_refcount_btree.c
fs/xfs/libxfs/xfs_rmap_btree.c
fs/xfs/xfs_health.c

index 262f5dc3a483e510e440846520d35870402075dc..e0b0cdd8f344c9a6a808073fa0bbbda83d10bf58 100644 (file)
@@ -16,6 +16,7 @@
 #include "xfs_alloc.h"
 #include "xfs_extent_busy.h"
 #include "xfs_error.h"
+#include "xfs_health.h"
 #include "xfs_trace.h"
 #include "xfs_trans.h"
 #include "xfs_ag.h"
@@ -477,6 +478,7 @@ const struct xfs_btree_ops xfs_bnobt_ops = {
 
        .lru_refs               = XFS_ALLOC_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_abtb_2),
+       .sick_mask              = XFS_SICK_AG_BNOBT,
 
        .dup_cursor             = xfs_allocbt_dup_cursor,
        .set_root               = xfs_allocbt_set_root,
@@ -508,6 +510,7 @@ const struct xfs_btree_ops xfs_cntbt_ops = {
 
        .lru_refs               = XFS_ALLOC_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_abtc_2),
+       .sick_mask              = XFS_SICK_AG_CNTBT,
 
        .dup_cursor             = xfs_allocbt_dup_cursor,
        .set_root               = xfs_allocbt_set_root,
index 6bc6096205b3c8cc8bf892e0159315e1531a9323..6e5fd0c06453d3da34033b8b92343145d686770a 100644 (file)
@@ -142,6 +142,9 @@ struct xfs_btree_ops {
        /* offset of btree stats array */
        unsigned int            statoff;
 
+       /* sick mask for health reporting (only for XFS_BTREE_TYPE_AG) */
+       unsigned int            sick_mask;
+
        /* cursor operations */
        struct xfs_btree_cur *(*dup_cursor)(struct xfs_btree_cur *);
        void    (*update_cursor)(struct xfs_btree_cur *src,
index ddb9a226914a8a24edc694384a443f4ccbc11287..1fe9d83c575ea858d488efdb31fd860b1685efae 100644 (file)
@@ -17,6 +17,7 @@
 #include "xfs_ialloc_btree.h"
 #include "xfs_alloc.h"
 #include "xfs_error.h"
+#include "xfs_health.h"
 #include "xfs_trace.h"
 #include "xfs_trans.h"
 #include "xfs_rmap.h"
@@ -408,6 +409,7 @@ const struct xfs_btree_ops xfs_inobt_ops = {
 
        .lru_refs               = XFS_INO_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_ibt_2),
+       .sick_mask              = XFS_SICK_AG_INOBT,
 
        .dup_cursor             = xfs_inobt_dup_cursor,
        .set_root               = xfs_inobt_set_root,
@@ -437,6 +439,7 @@ const struct xfs_btree_ops xfs_finobt_ops = {
 
        .lru_refs               = XFS_INO_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_fibt_2),
+       .sick_mask              = XFS_SICK_AG_FINOBT,
 
        .dup_cursor             = xfs_inobt_dup_cursor,
        .set_root               = xfs_finobt_set_root,
index 16677cbbddfcc3b673e9b7dc254f46b8a809db8b..6388a0c9b69153d155c9ed1ca6f14f594f4c8218 100644 (file)
@@ -16,6 +16,7 @@
 #include "xfs_refcount.h"
 #include "xfs_alloc.h"
 #include "xfs_error.h"
+#include "xfs_health.h"
 #include "xfs_trace.h"
 #include "xfs_trans.h"
 #include "xfs_bit.h"
@@ -327,6 +328,7 @@ const struct xfs_btree_ops xfs_refcountbt_ops = {
 
        .lru_refs               = XFS_REFC_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_refcbt_2),
+       .sick_mask              = XFS_SICK_AG_REFCNTBT,
 
        .dup_cursor             = xfs_refcountbt_dup_cursor,
        .set_root               = xfs_refcountbt_set_root,
index e1ddf814492c522b6c0fc239ecd8429f63cff11b..abaf5e190e998ba6ee152af4bf6605d0b3f0a868 100644 (file)
@@ -16,6 +16,7 @@
 #include "xfs_btree_staging.h"
 #include "xfs_rmap.h"
 #include "xfs_rmap_btree.h"
+#include "xfs_health.h"
 #include "xfs_trace.h"
 #include "xfs_error.h"
 #include "xfs_extent_busy.h"
@@ -483,6 +484,7 @@ const struct xfs_btree_ops xfs_rmapbt_ops = {
 
        .lru_refs               = XFS_RMAP_BTREE_REF,
        .statoff                = XFS_STATS_CALC_INDEX(xs_rmap_2),
+       .sick_mask              = XFS_SICK_AG_RMAPBT,
 
        .dup_cursor             = xfs_rmapbt_dup_cursor,
        .set_root               = xfs_rmapbt_set_root,
index 855221c0dd34135f1f38d74df6a745efb57f05dd..9921b5d3f1586db8291cdeeb2b25d1e9ece8b039 100644 (file)
@@ -526,36 +526,22 @@ void
 xfs_btree_mark_sick(
        struct xfs_btree_cur            *cur)
 {
-       unsigned int                    mask;
-
-       switch (cur->bc_btnum) {
-       case XFS_BTNUM_BMAP:
-               xfs_bmap_mark_sick(cur->bc_ino.ip, cur->bc_ino.whichfork);
+       switch (cur->bc_ops->type) {
+       case XFS_BTREE_TYPE_AG:
+               ASSERT(cur->bc_ops->sick_mask);
+               xfs_ag_mark_sick(cur->bc_ag.pag, cur->bc_ops->sick_mask);
                return;
-       case XFS_BTNUM_BNO:
-               mask = XFS_SICK_AG_BNOBT;
-               break;
-       case XFS_BTNUM_CNT:
-               mask = XFS_SICK_AG_CNTBT;
-               break;
-       case XFS_BTNUM_INO:
-               mask = XFS_SICK_AG_INOBT;
-               break;
-       case XFS_BTNUM_FINO:
-               mask = XFS_SICK_AG_FINOBT;
-               break;
-       case XFS_BTNUM_RMAP:
-               mask = XFS_SICK_AG_RMAPBT;
-               break;
-       case XFS_BTNUM_REFC:
-               mask = XFS_SICK_AG_REFCNTBT;
-               break;
+       case XFS_BTREE_TYPE_INODE:
+               if (cur->bc_btnum == XFS_BTNUM_BMAP) {
+                       xfs_bmap_mark_sick(cur->bc_ino.ip,
+                                          cur->bc_ino.whichfork);
+                       return;
+               }
+               fallthrough;
        default:
                ASSERT(0);
                return;
        }
-
-       xfs_ag_mark_sick(cur->bc_ag.pag, mask);
 }
 
 /*