On Sun, Apr 10, 2022 at 11:21:11AM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > As mentioned in the previous commit, the kernel misuses sb_frextents in > the incore mount to reflect both incore reservations made by running > transactions as well as the actual count of free rt extents on disk. > This results in the superblock being written to the log with an > underestimate of the number of rt extents that are marked free in the > rtbitmap. > > Teaching XFS to recompute frextents after log recovery avoids > operational problems in the current mount, but it doesn't solve the > problem of us writing undercounted frextents which are then recovered by > an older kernel that doesn't have that fix. > > Create an incore percpu counter to mirror the ondisk frextents. This > new counter will track transaction reservations and the only time we > will touch the incore super counter (i.e the one that gets logged) is > when those transactions commit updates to the rt bitmap. This is in > contrast to the lazysbcount counters (e.g. fdblocks), where we know that > log recovery will always fix any incorrect counter that we log. > As a bonus, we only take m_sb_lock at transaction commit time. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> Looks good - much neater than th first version and I really like the way you did the xfs_mod_freecounter() factoring. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx