xfs
[Top] [All Lists]

[PATCH 3/6] xfs: fix computation of inode btree maxlevels

To: xfs@xxxxxxxxxxx
Subject: [PATCH 3/6] xfs: fix computation of inode btree maxlevels
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Mon, 7 Mar 2016 08:49:47 +1100
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1457300990-18300-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1457300990-18300-1-git-send-email-david@xxxxxxxxxxxxx>
From: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx>

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@xxxxxxxxxxxxx>
Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
Reviewed-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Dave Chinner <david@xxxxxxxxxxxxx>
---
 fs/xfs/libxfs/xfs_ialloc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
index 66d702e..22297f9 100644
--- a/fs/xfs/libxfs/xfs_ialloc.c
+++ b/fs/xfs/libxfs/xfs_ialloc.c
@@ -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;
-- 
2.7.0

<Prev in Thread] Current Thread [Next in Thread>