aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/zfs/metaslab.c7
-rw-r--r--module/zfs/spa.c3
2 files changed, 8 insertions, 2 deletions
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c
index d50225fc3..3876b1014 100644
--- a/module/zfs/metaslab.c
+++ b/module/zfs/metaslab.c
@@ -640,6 +640,7 @@ void
metaslab_class_evict_old(metaslab_class_t *mc, uint64_t txg)
{
multilist_t *ml = &mc->mc_metaslab_txg_list;
+ hrtime_t now = gethrtime();
for (int i = 0; i < multilist_get_num_sublists(ml); i++) {
multilist_sublist_t *mls = multilist_sublist_lock_idx(ml, i);
metaslab_t *msp = multilist_sublist_head(mls);
@@ -663,8 +664,10 @@ metaslab_class_evict_old(metaslab_class_t *mc, uint64_t txg)
multilist_sublist_unlock(mls);
if (txg >
msp->ms_selected_txg + metaslab_unload_delay &&
- gethrtime() > msp->ms_selected_time +
- (uint64_t)MSEC2NSEC(metaslab_unload_delay_ms)) {
+ now > msp->ms_selected_time +
+ MSEC2NSEC(metaslab_unload_delay_ms) &&
+ (msp->ms_allocator == -1 ||
+ !metaslab_preload_enabled)) {
metaslab_evict(msp, txg);
} else {
/*
diff --git a/module/zfs/spa.c b/module/zfs/spa.c
index fc7cf000f..886867b73 100644
--- a/module/zfs/spa.c
+++ b/module/zfs/spa.c
@@ -9939,6 +9939,9 @@ spa_sync(spa_t *spa, uint64_t txg)
metaslab_class_evict_old(spa->spa_normal_class, txg);
metaslab_class_evict_old(spa->spa_log_class, txg);
+ /* spa_embedded_log_class has only one metaslab per vdev. */
+ metaslab_class_evict_old(spa->spa_special_class, txg);
+ metaslab_class_evict_old(spa->spa_dedup_class, txg);
spa_sync_close_syncing_log_sm(spa);