• D
    xfs: finobt AG reserves don't consider last AG can be a runt · 2f00d4bc
    Dave Chinner 提交于
    mainline inclusion
    from mainline-4.20-rc4
    commit c08768977b9a65cab9bcfd1ba30ffb686b2b7c69
    category: bugfix
    bugzilla: 18898
    CVE: NA
    
    ---------------------------
    
    The last AG may be very small comapred to all other AGs, and hence
    AG reservations based on the superblock AG size may actually consume
    more space than the AG actually has. This results on assert failures
    like:
    
    XFS: Assertion failed: xfs_perag_resv(pag, XFS_AG_RESV_METADATA)->ar_reserved + xfs_perag_resv(pag, XFS_AG_RESV_RMAPBT)->ar_reserved <= pag->pagf_freeblks + pag->pagf_flcount, file: fs/xfs/libxfs/xfs_ag_resv.c, line: 319
    [   48.932891]  xfs_ag_resv_init+0x1bd/0x1d0
    [   48.933853]  xfs_fs_reserve_ag_blocks+0x37/0xb0
    [   48.934939]  xfs_mountfs+0x5b3/0x920
    [   48.935804]  xfs_fs_fill_super+0x462/0x640
    [   48.936784]  ? xfs_test_remount_options+0x60/0x60
    [   48.937908]  mount_bdev+0x178/0x1b0
    [   48.938751]  mount_fs+0x36/0x170
    [   48.939533]  vfs_kern_mount.part.43+0x54/0x130
    [   48.940596]  do_mount+0x20e/0xcb0
    [   48.941396]  ? memdup_user+0x3e/0x70
    [   48.942249]  ksys_mount+0xba/0xd0
    [   48.943046]  __x64_sys_mount+0x21/0x30
    [   48.943953]  do_syscall_64+0x54/0x170
    [   48.944835]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Hence we need to ensure the finobt per-ag space reservations take
    into account the size of the last AG rather than treat it like all
    the other full size AGs.
    
    Note that both refcountbt and rmapbt already take the size of the AG
    into account via reading the AGF length directly.
    Signed-off-by: NDave Chinner <dchinner@redhat.com>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: Nyu kuai <yukuai3@huawei.com>
    Reviewed-by: Nzhengbin <zhengbin13@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    2f00d4bc
xfs_ialloc_btree.c 14.6 KB