Re: [PATCH 1/6] xfs: fix xfs_rtrmapbt_mem_cursor for non-rmap filesystems

"Darrick J. Wong" <[email protected]>
Newsgroups org.kernel.vger.linux-xfs,org.kernel.vger.stable
Message-ID <20260819233025.GF6072@frogsfrogsfrogs>
On Wed, Aug 19, 2026 at 04:19:43PM -0700, Darrick J. Wong wrote:
> On Tue, Aug 18, 2026 at 11:16:39PM -0700, Christoph Hellwig wrote:
> > On Wed, Aug 12, 2026 at 10:25:40PM -0700, Darrick J. Wong wrote:
> > > From: Darrick J. Wong <[email protected]>
> > > 
> > > It's possible to construct an in-memory rtrmap btree for filesystems
> > > that don't have the rmap feature enabled.  The kernel doesn't do this,
> > > but xfs_repair will, if asked to reindex a filesystem that has rtreflink
> > > enabled but not rtrmap.  Therefore, we must create the cursor with
> > > enough levels to handle a maximally sized btree possible.
> > 
> > Should repair initialize m_rtrmap_maxlevels instead of overallocating
> > in the kernel?
> 
> I'd prefer not to because (a) m_rtrmap_maxlevels is used in various
> places (like computing transaction reservations) outside of creating
> in-memory btrees and that would be weird on a non-rmap filesystem; (b)
> the regular rmap code in xfs_repair already allocates biggish cursors
> for in-memory btrees this way; and (c) I don't think it matters much
> even in the kernel because if we're that low on memory then we're not
> going to be able to create a replacement rmap record set in memory to
> stage the rmapbt regeneration anyway.
> 
> That said, a more targetted way would be to add a maxlevels parameter to
> xfs_{rt,}rmapbt_mem_cursor() and let the caller figure out the optimal
> setting for their context -- online repair can use
> mp->m_{rt,}rmap_maxlevels because it only creates in-memory rmap btrees
> when rmap is enabled; and xfs_repair can use
> xfs_{rt,}rmap_maxlevels_ondisk() for the weird (reflink && !rmap) case.
> 
> How does that sound?

On second thought ... the slab cache that we use to create rtrmapbt
cursors always makes them big enough for xfs_rtrmap_maxlevels_ondisk()
levels, so we always consume that much memory no matter what we set
bc_nlevels to in xfs_rtrmapbt_mem_cursor().

--D
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.