Commit 1d319ac6 authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

xfs: disable sb_frextents for zoned file systems



Zoned file systems not only don't use the global frextents counter, but
for them the in-memory percpu counter also includes reservations taken
before even allocating delalloc extent records, so it will never match
the per-zone used information.  Disable all updates and verification of
the sb counter for zoned file systems as it isn't useful for them.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
parent 1fd8159e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1333,7 +1333,7 @@ xfs_log_sb(
	 * we handle nearly-lockless reservations, so we must use the _positive
	 * variant here to avoid writing out nonsense frextents.
	 */
	if (xfs_has_rtgroups(mp)) {
	if (xfs_has_rtgroups(mp) && !xfs_has_zoned(mp)) {
		mp->m_sb.sb_frextents =
				xfs_sum_freecounter(mp, XC_FREE_RTEXTENTS);
	}
+9 −2
Original line number Diff line number Diff line
@@ -413,7 +413,13 @@ xchk_fscount_count_frextents(

	fsc->frextents = 0;
	fsc->frextents_delayed = 0;
	if (!xfs_has_realtime(mp))

	/*
	 * Don't bother verifying and repairing the fs counters for zoned file
	 * systems as they don't track an on-disk frextents count, and the
	 * in-memory percpu counter also includes reservations.
	 */
	if (!xfs_has_realtime(mp) || xfs_has_zoned(mp))
		return 0;

	while ((rtg = xfs_rtgroup_next(mp, rtg))) {
@@ -597,7 +603,8 @@ xchk_fscounters(
			try_again = true;
	}

	if (!xchk_fscount_within_range(sc, frextents,
	if (!xfs_has_zoned(mp) &&
	    !xchk_fscount_within_range(sc, frextents,
			&mp->m_free[XC_FREE_RTEXTENTS].count,
			fsc->frextents - fsc->frextents_delayed)) {
		if (fsc->frozen)
+6 −4
Original line number Diff line number Diff line
@@ -74,10 +74,12 @@ xrep_fscounters(
	 * track of the delalloc reservations separately, as they are are
	 * subtracted from m_frextents, but not included in sb_frextents.
	 */
	if (!xfs_has_zoned(mp)) {
		xfs_set_freecounter(mp, XC_FREE_RTEXTENTS,
				fsc->frextents - fsc->frextents_delayed);
		if (!xfs_has_rtgroups(mp))
			mp->m_sb.sb_frextents = fsc->frextents;
	}

	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -553,7 +553,7 @@ xfs_check_summary_counts(
	 * If we're mounting the rt volume after recovering the log, recompute
	 * frextents from the rtbitmap file to fix the inconsistency.
	 */
	if (xfs_has_realtime(mp) && !xfs_is_clean(mp)) {
	if (xfs_has_realtime(mp) && !xfs_has_zoned(mp) && !xfs_is_clean(mp)) {
		error = xfs_rtalloc_reinit_frextents(mp);
		if (error)
			return error;
+3 −1
Original line number Diff line number Diff line
@@ -1131,7 +1131,9 @@ xfs_reinit_percpu_counters(
	percpu_counter_set(&mp->m_icount, mp->m_sb.sb_icount);
	percpu_counter_set(&mp->m_ifree, mp->m_sb.sb_ifree);
	xfs_set_freecounter(mp, XC_FREE_BLOCKS, mp->m_sb.sb_fdblocks);
	xfs_set_freecounter(mp, XC_FREE_RTEXTENTS, mp->m_sb.sb_frextents);
	if (!xfs_has_zoned(mp))
		xfs_set_freecounter(mp, XC_FREE_RTEXTENTS,
				mp->m_sb.sb_frextents);
}

static void