• Darrick J. Wong's avatar
    xfs: bump INUMBERS cursor correctly in xfs_inumbers_walk · 0df5c39b
    Darrick J. Wong authored
    There's a subtle unit conversion error when we increment the INUMBERS
    cursor at the end of xfs_inumbers_walk.  If there's an inode chunk at
    the very end of the AG /and/ the AG size is a perfect power of two, the
    startino of that last chunk (which is in units of AG inodes) will be 63
    less than (1 << agino_log).  If we add XFS_INODES_PER_CHUNK to the
    startino, we end up with a startino that's larger than (1 << agino_log)
    and when we convert that back to fs inode units we'll rip off that upper
    bit and wind up back at the start of the AG.
    
    Fix this by converting to units of fs inodes before adding
    XFS_INODES_PER_CHUNK so that we'll harmlessly end up pointing to the
    next AG.
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    0df5c39b
xfs_itable.c 10.3 KB