diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/libxfs/xfs_ialloc_btree.c | 9 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_refcount_btree.c | 9 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_rmap_btree.c | 9 |
3 files changed, 27 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c index 1080381ff243..bc2dfacd2f4a 100644 --- a/fs/xfs/libxfs/xfs_ialloc_btree.c +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c | |||
@@ -549,6 +549,15 @@ xfs_inobt_max_size( | |||
549 | if (mp->m_inobt_mxr[0] == 0) | 549 | if (mp->m_inobt_mxr[0] == 0) |
550 | return 0; | 550 | return 0; |
551 | 551 | ||
552 | /* | ||
553 | * The log is permanently allocated, so the space it occupies will | ||
554 | * never be available for the kinds of things that would require btree | ||
555 | * expansion. We therefore can pretend the space isn't there. | ||
556 | */ | ||
557 | if (mp->m_sb.sb_logstart && | ||
558 | XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno) | ||
559 | agblocks -= mp->m_sb.sb_logblocks; | ||
560 | |||
552 | return xfs_btree_calc_size(mp->m_inobt_mnr, | 561 | return xfs_btree_calc_size(mp->m_inobt_mnr, |
553 | (uint64_t)agblocks * mp->m_sb.sb_inopblock / | 562 | (uint64_t)agblocks * mp->m_sb.sb_inopblock / |
554 | XFS_INODES_PER_CHUNK); | 563 | XFS_INODES_PER_CHUNK); |
diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c index 6f47ab876d90..5d9de9b21726 100644 --- a/fs/xfs/libxfs/xfs_refcount_btree.c +++ b/fs/xfs/libxfs/xfs_refcount_btree.c | |||
@@ -427,6 +427,15 @@ xfs_refcountbt_calc_reserves( | |||
427 | tree_len = be32_to_cpu(agf->agf_refcount_blocks); | 427 | tree_len = be32_to_cpu(agf->agf_refcount_blocks); |
428 | xfs_trans_brelse(tp, agbp); | 428 | xfs_trans_brelse(tp, agbp); |
429 | 429 | ||
430 | /* | ||
431 | * The log is permanently allocated, so the space it occupies will | ||
432 | * never be available for the kinds of things that would require btree | ||
433 | * expansion. We therefore can pretend the space isn't there. | ||
434 | */ | ||
435 | if (mp->m_sb.sb_logstart && | ||
436 | XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno) | ||
437 | agblocks -= mp->m_sb.sb_logblocks; | ||
438 | |||
430 | *ask += xfs_refcountbt_max_size(mp, agblocks); | 439 | *ask += xfs_refcountbt_max_size(mp, agblocks); |
431 | *used += tree_len; | 440 | *used += tree_len; |
432 | 441 | ||
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c index 5738e11055e6..5d1f8884c888 100644 --- a/fs/xfs/libxfs/xfs_rmap_btree.c +++ b/fs/xfs/libxfs/xfs_rmap_btree.c | |||
@@ -578,6 +578,15 @@ xfs_rmapbt_calc_reserves( | |||
578 | tree_len = be32_to_cpu(agf->agf_rmap_blocks); | 578 | tree_len = be32_to_cpu(agf->agf_rmap_blocks); |
579 | xfs_trans_brelse(tp, agbp); | 579 | xfs_trans_brelse(tp, agbp); |
580 | 580 | ||
581 | /* | ||
582 | * The log is permanently allocated, so the space it occupies will | ||
583 | * never be available for the kinds of things that would require btree | ||
584 | * expansion. We therefore can pretend the space isn't there. | ||
585 | */ | ||
586 | if (mp->m_sb.sb_logstart && | ||
587 | XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart) == agno) | ||
588 | agblocks -= mp->m_sb.sb_logblocks; | ||
589 | |||
581 | /* Reserve 1% of the AG or enough for 1 block per record. */ | 590 | /* Reserve 1% of the AG or enough for 1 block per record. */ |
582 | *ask += max(agblocks / 100, xfs_rmapbt_max_size(mp, agblocks)); | 591 | *ask += max(agblocks / 100, xfs_rmapbt_max_size(mp, agblocks)); |
583 | *used += tree_len; | 592 | *used += tree_len; |