mirror of https://github.com/torvalds/linux.git
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: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
This commit is contained in:
parent
1fd8159e7c
commit
1d319ac6fe
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
xfs_set_freecounter(mp, XC_FREE_RTEXTENTS,
|
||||
fsc->frextents - fsc->frextents_delayed);
|
||||
if (!xfs_has_rtgroups(mp))
|
||||
mp->m_sb.sb_frextents = fsc->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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue