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
|
* we handle nearly-lockless reservations, so we must use the _positive
|
||||||
* variant here to avoid writing out nonsense frextents.
|
* 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 =
|
mp->m_sb.sb_frextents =
|
||||||
xfs_sum_freecounter(mp, XC_FREE_RTEXTENTS);
|
xfs_sum_freecounter(mp, XC_FREE_RTEXTENTS);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -413,7 +413,13 @@ xchk_fscount_count_frextents(
|
||||||
|
|
||||||
fsc->frextents = 0;
|
fsc->frextents = 0;
|
||||||
fsc->frextents_delayed = 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;
|
return 0;
|
||||||
|
|
||||||
while ((rtg = xfs_rtgroup_next(mp, rtg))) {
|
while ((rtg = xfs_rtgroup_next(mp, rtg))) {
|
||||||
|
|
@ -597,7 +603,8 @@ xchk_fscounters(
|
||||||
try_again = true;
|
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,
|
&mp->m_free[XC_FREE_RTEXTENTS].count,
|
||||||
fsc->frextents - fsc->frextents_delayed)) {
|
fsc->frextents - fsc->frextents_delayed)) {
|
||||||
if (fsc->frozen)
|
if (fsc->frozen)
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,12 @@ xrep_fscounters(
|
||||||
* track of the delalloc reservations separately, as they are are
|
* track of the delalloc reservations separately, as they are are
|
||||||
* subtracted from m_frextents, but not included in sb_frextents.
|
* subtracted from m_frextents, but not included in sb_frextents.
|
||||||
*/
|
*/
|
||||||
xfs_set_freecounter(mp, XC_FREE_RTEXTENTS,
|
if (!xfs_has_zoned(mp)) {
|
||||||
fsc->frextents - fsc->frextents_delayed);
|
xfs_set_freecounter(mp, XC_FREE_RTEXTENTS,
|
||||||
if (!xfs_has_rtgroups(mp))
|
fsc->frextents - fsc->frextents_delayed);
|
||||||
mp->m_sb.sb_frextents = fsc->frextents;
|
if (!xfs_has_rtgroups(mp))
|
||||||
|
mp->m_sb.sb_frextents = fsc->frextents;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -553,7 +553,7 @@ xfs_check_summary_counts(
|
||||||
* If we're mounting the rt volume after recovering the log, recompute
|
* If we're mounting the rt volume after recovering the log, recompute
|
||||||
* frextents from the rtbitmap file to fix the inconsistency.
|
* 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);
|
error = xfs_rtalloc_reinit_frextents(mp);
|
||||||
if (error)
|
if (error)
|
||||||
return 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_icount, mp->m_sb.sb_icount);
|
||||||
percpu_counter_set(&mp->m_ifree, mp->m_sb.sb_ifree);
|
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_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
|
static void
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue