]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - fs/xfs/libxfs/xfs_btree.h
xfs: make xfs btree stats less huge
[mirror_ubuntu-bionic-kernel.git] / fs / xfs / libxfs / xfs_btree.h
index c2b01d1c79ee3ea5c9bca058359a9b73f0f70bd5..b69b947c4c1bd5571efe62df2afa18c9d6a52ae7 100644 (file)
@@ -96,46 +96,10 @@ union xfs_btree_rec {
 /*
  * Generic stats interface
  */
-#define __XFS_BTREE_STATS_INC(mp, type, stat) \
-       XFS_STATS_INC(mp, xs_ ## type ## _2_ ## stat)
 #define XFS_BTREE_STATS_INC(cur, stat) \
-do {    \
-       struct xfs_mount *__mp = cur->bc_mp; \
-       switch (cur->bc_btnum) {  \
-       case XFS_BTNUM_BNO: __XFS_BTREE_STATS_INC(__mp, abtb, stat); break; \
-       case XFS_BTNUM_CNT: __XFS_BTREE_STATS_INC(__mp, abtc, stat); break; \
-       case XFS_BTNUM_BMAP: __XFS_BTREE_STATS_INC(__mp, bmbt, stat); break; \
-       case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(__mp, ibt, stat); break; \
-       case XFS_BTNUM_FINO: __XFS_BTREE_STATS_INC(__mp, fibt, stat); break; \
-       case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_INC(__mp, rmap, stat); break; \
-       case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(__mp, refcbt, stat); break; \
-       case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break;       \
-       }       \
-} while (0)
-
-#define __XFS_BTREE_STATS_ADD(mp, type, stat, val) \
-       XFS_STATS_ADD(mp, xs_ ## type ## _2_ ## stat, val)
-#define XFS_BTREE_STATS_ADD(cur, stat, val)  \
-do {    \
-       struct xfs_mount *__mp = cur->bc_mp; \
-       switch (cur->bc_btnum) {  \
-       case XFS_BTNUM_BNO:     \
-               __XFS_BTREE_STATS_ADD(__mp, abtb, stat, val); break; \
-       case XFS_BTNUM_CNT:     \
-               __XFS_BTREE_STATS_ADD(__mp, abtc, stat, val); break; \
-       case XFS_BTNUM_BMAP:    \
-               __XFS_BTREE_STATS_ADD(__mp, bmbt, stat, val); break; \
-       case XFS_BTNUM_INO:     \
-               __XFS_BTREE_STATS_ADD(__mp, ibt, stat, val); break; \
-       case XFS_BTNUM_FINO:    \
-               __XFS_BTREE_STATS_ADD(__mp, fibt, stat, val); break; \
-       case XFS_BTNUM_RMAP:    \
-               __XFS_BTREE_STATS_ADD(__mp, rmap, stat, val); break; \
-       case XFS_BTNUM_REFC:    \
-               __XFS_BTREE_STATS_ADD(__mp, refcbt, stat, val); break; \
-       case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \
-       }       \
-} while (0)
+       XFS_STATS_INC_OFF((cur)->bc_mp, (cur)->bc_statoff + __XBTS_ ## stat)
+#define XFS_BTREE_STATS_ADD(cur, stat, val)    \
+       XFS_STATS_ADD_OFF((cur)->bc_mp, (cur)->bc_statoff + __XBTS_ ## stat, val)
 
 #define        XFS_BTREE_MAXLEVELS     9       /* max of all btrees */
 
@@ -253,6 +217,7 @@ typedef struct xfs_btree_cur
        __uint8_t       bc_nlevels;     /* number of levels in the tree */
        __uint8_t       bc_blocklog;    /* log2(blocksize) of btree blocks */
        xfs_btnum_t     bc_btnum;       /* identifies which btree type */
+       int             bc_statoff;     /* offset of btre stats array */
        union {
                struct {                        /* needed for BNO, CNT, INO */
                        struct xfs_buf  *agbp;  /* agf/agi buffer pointer */