xfs: update incore per-AG inode count
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 12 Jun 2018 04:52:01 +0000 (21:52 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 12 Jun 2018 04:53:52 +0000 (21:53 -0700)
For whatever reason we never actually update pagi_count (the in-core
perag inode count) when we allocate or free inode chunks.  Online scrub
is going to use it, so we need to fix the accounting.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/libxfs/xfs_ialloc.c

index 8ec39dad62d752b68037cb4dfa7ae770e41871cc..0d968e8143aaa50c4e86bf5d3abfa18e6a5eeb35 100644 (file)
@@ -897,6 +897,7 @@ sparse_alloc:
        be32_add_cpu(&agi->agi_freecount, newlen);
        pag = xfs_perag_get(args.mp, agno);
        pag->pagi_freecount += newlen;
+       pag->pagi_count += newlen;
        xfs_perag_put(pag);
        agi->agi_newino = cpu_to_be32(newino);
 
@@ -1991,6 +1992,7 @@ xfs_difree_inobt(
                xfs_ialloc_log_agi(tp, agbp, XFS_AGI_COUNT | XFS_AGI_FREECOUNT);
                pag = xfs_perag_get(mp, agno);
                pag->pagi_freecount -= ilen - 1;
+               pag->pagi_count -= ilen;
                xfs_perag_put(pag);
                xfs_trans_mod_sb(tp, XFS_TRANS_SB_ICOUNT, -ilen);
                xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -(ilen - 1));