diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2016-06-21 11:53:28 +1000 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-06-21 11:53:28 +1000 |
commit | 19b54ee66c4c5de8f8db74d5914d9a97161460bf (patch) | |
tree | 3ef3b0221a531fd418d3b41b7c250ded1b9638ed /fs/xfs/libxfs/xfs_btree.h | |
parent | e66a4c678e64932eb4befd95a348b9632603d27c (diff) | |
download | linux-19b54ee66c4c5de8f8db74d5914d9a97161460bf.tar.gz linux-19b54ee66c4c5de8f8db74d5914d9a97161460bf.tar.bz2 linux-19b54ee66c4c5de8f8db74d5914d9a97161460bf.zip |
xfs: refactor btree maxlevels computation
Create a common function to calculate the maximum height of a per-AG
btree. This will eventually be used by the rmapbt and refcountbt
code to calculate appropriate maxlevels values for each. This is
important because the verifiers and the transaction block
reservations depend on accurate estimates of how many blocks are
needed to satisfy a btree split.
We were mistakenly using the max bnobt height for all the btrees,
which creates a dangerous situation since the larger records and
keys in an rmapbt make it very possible that the rmapbt will be
taller than the bnobt and so we can run out of transaction block
reservation.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/libxfs/xfs_btree.h')
-rw-r--r-- | fs/xfs/libxfs/xfs_btree.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index 2e874be70209..785a99682159 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -474,5 +474,7 @@ static inline int xfs_btree_get_level(struct xfs_btree_block *block) bool xfs_btree_sblock_v5hdr_verify(struct xfs_buf *bp); bool xfs_btree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); +uint xfs_btree_compute_maxlevels(struct xfs_mount *mp, uint *limits, + unsigned long len); #endif /* __XFS_BTREE_H__ */ |