Merge tag 'xfs-5.2-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
Pull xfs fix from Darrick Wong: "Fix an accounting mistake where we included the log space when calculating the reserve space for metadata expansion" * tag 'xfs-5.2-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: don't reserve per-AG space for an internal log
This commit is contained in:
@@ -549,6 +549,15 @@ xfs_inobt_max_size(
|
||||
if (mp->m_inobt_mxr[0] == 0)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* The log is permanently allocated, so the space it occupies will
|
||||
* never be available for the kinds of things that would require btree
|
||||
* expansion. We therefore can pretend the space isn't there.
|
||||
*/
|
||||
if (mp->m_sb.sb_logstart &&
|
||||
XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno)
|
||||
agblocks -= mp->m_sb.sb_logblocks;
|
||||
|
||||
return xfs_btree_calc_size(mp->m_inobt_mnr,
|
||||
(uint64_t)agblocks * mp->m_sb.sb_inopblock /
|
||||
XFS_INODES_PER_CHUNK);
|
||||
|
||||
@@ -427,6 +427,15 @@ xfs_refcountbt_calc_reserves(
|
||||
tree_len = be32_to_cpu(agf->agf_refcount_blocks);
|
||||
xfs_trans_brelse(tp, agbp);
|
||||
|
||||
/*
|
||||
* The log is permanently allocated, so the space it occupies will
|
||||
* never be available for the kinds of things that would require btree
|
||||
* expansion. We therefore can pretend the space isn't there.
|
||||
*/
|
||||
if (mp->m_sb.sb_logstart &&
|
||||
XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno)
|
||||
agblocks -= mp->m_sb.sb_logblocks;
|
||||
|
||||
*ask += xfs_refcountbt_max_size(mp, agblocks);
|
||||
*used += tree_len;
|
||||
|
||||
|
||||
@@ -578,6 +578,15 @@ xfs_rmapbt_calc_reserves(
|
||||
tree_len = be32_to_cpu(agf->agf_rmap_blocks);
|
||||
xfs_trans_brelse(tp, agbp);
|
||||
|
||||
/*
|
||||
* The log is permanently allocated, so the space it occupies will
|
||||
* never be available for the kinds of things that would require btree
|
||||
* expansion. We therefore can pretend the space isn't there.
|
||||
*/
|
||||
if (mp->m_sb.sb_logstart &&
|
||||
XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno)
|
||||
agblocks -= mp->m_sb.sb_logblocks;
|
||||
|
||||
/* Reserve 1% of the AG or enough for 1 block per record. */
|
||||
*ask += max(agblocks / 100, xfs_rmapbt_max_size(mp, agblocks));
|
||||
*used += tree_len;
|
||||
|
||||
Reference in New Issue
Block a user