Print this page
3525 Persistent L2ARC

*** 1483,1496 **** if (vdev_open(vd) != 0) continue; (void) vdev_validate_aux(vd); ! if (!vdev_is_dead(vd)) ! l2arc_add_vdev(spa, vd); } } /* * Purge vdevs that were dropped */ for (i = 0; i < oldnvdevs; i++) { --- 1483,1502 ---- if (vdev_open(vd) != 0) continue; (void) vdev_validate_aux(vd); ! if (!vdev_is_dead(vd)) { ! boolean_t do_rebuild = B_FALSE; ! ! (void) nvlist_lookup_boolean_value(l2cache[i], ! ZPOOL_CONFIG_L2CACHE_PERSISTENT, ! &do_rebuild); ! l2arc_add_vdev(spa, vd, do_rebuild); } } + } /* * Purge vdevs that were dropped */ for (i = 0; i < oldnvdevs; i++) {
*** 2694,2703 **** --- 2700,2711 ---- * Clean up any stale temporary dataset userrefs. */ dsl_pool_clean_tmp_userrefs(spa->spa_dsl_pool); } + spa_async_request(spa, SPA_ASYNC_L2CACHE_REBUILD); + return (0); } static int spa_load_retry(spa_t *spa, spa_load_state_t state, int mosconfig)
*** 5643,5652 **** --- 5651,5666 ---- */ if (tasks & SPA_ASYNC_RESILVER) dsl_resilver_restart(spa->spa_dsl_pool, 0); /* + * Kick off L2 cache rebuilding. + */ + if (tasks & SPA_ASYNC_L2CACHE_REBUILD) + l2arc_spa_rebuild_start(spa); + + /* * Let the world know that we're done. */ mutex_enter(&spa->spa_async_lock); spa->spa_async_thread = NULL; cv_broadcast(&spa->spa_async_cv);