On Thu, Oct 24, 2024 at 10:00:38AM -0700, Darrick J. Wong wrote: > On Thu, Oct 24, 2024 at 01:51:04PM +1100, Dave Chinner wrote: > > From: Dave Chinner <dchinner@xxxxxxxxxx> > > > > Due to the failure to correctly limit sparse inode chunk allocation > > in runt AGs, we now have many production filesystems with sparse > > inode chunks allocated across the end of the runt AG. xfs_repair > > or a growfs is needed to fix this situation, neither of which are > > particularly appealing. > > > > The on disk layout from the metadump shows AG 12 as a runt that is > > 1031 blocks in length and the last inode chunk allocated on disk at > > agino 8192. > > Does this problem also happen on non-runt AGs? No. The highest agbno an inode chunk can be allocated at in a full size AG is aligned by rounding down from sb_agblocks. Hence sb_agblocks can be unaligned and nothing will go wrong. The problem is purely that the runt AG being shorter than sb_agblocks and so this highest agbno allocation guard is set beyond the end of the AG... > If the only free space > that could be turned into a sparse cluster is unaligned space at the > end of AG 0, would you still get the same corruption error? It will only happen if AG 0 is a runt AG, and then the same error would occur. We don't currently allow single AG filesystems, nor when they are set up do we create them as a runt - the are always full size. So current single AG filesystems made by mkfs won't have this problem. That said, the proposed single AG cloud image filesystems that set AG 0 up as a runt (i.e. dblocks smaller than sb_agblocks) to allow the AG 0 size to grow along with the size of the filesystem could definitely have this problem. i.e. sb_dblocks needs to be inode chunk aligned in this sort of setup, or these filesystems need to be restricted to fixed kernels.... -Dave. -- Dave Chinner david@xxxxxxxxxxxxx