mirror of https://gitee.com/openkylin/linux.git
xfs: fix computation of inode btree maxlevels
Commit 88740da18[1] introduced a function to compute the maximum height of the inode btree back in 1994. Back then, apparently, the freespace and inode btrees shared the same geometry; however, it has long since been the case that the inode and freespace btrees have different record and key sizes. Therefore, we must use m_inobt_mnr if we want a correct calculation/log reservation/etc. (Yes, this bug has been around for 21 years and ten months.) (Yes, I was in middle school when this bug was committed.) [1] http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=88740da18ddd9d7ba3ebaa9502fefc6ef2fd19cd Historical-research-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
a798011c8f
commit
49ca9118e6
|
@ -2403,8 +2403,8 @@ xfs_ialloc_compute_maxlevels(
|
|||
|
||||
maxleafents = (1LL << XFS_INO_AGINO_BITS(mp)) >>
|
||||
XFS_INODES_PER_CHUNK_LOG;
|
||||
minleafrecs = mp->m_alloc_mnr[0];
|
||||
minnoderecs = mp->m_alloc_mnr[1];
|
||||
minleafrecs = mp->m_inobt_mnr[0];
|
||||
minnoderecs = mp->m_inobt_mnr[1];
|
||||
maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs;
|
||||
for (level = 1; maxblocks > 1; level++)
|
||||
maxblocks = (maxblocks + minnoderecs - 1) / minnoderecs;
|
||||
|
|
Loading…
Reference in New Issue