Changeset View
Changeset View
Standalone View
Standalone View
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
Show First 20 Lines • Show All 2,029 Lines • ▼ Show 20 Lines | if (error) { | ||||
if ((BP_GET_LEVEL(bp) != 0 || DMU_OT_IS_METADATA(type)) && | if ((BP_GET_LEVEL(bp) != 0 || DMU_OT_IS_METADATA(type)) && | ||||
type != DMU_OT_INTENT_LOG) | type != DMU_OT_INTENT_LOG) | ||||
atomic_inc_64(&sle->sle_meta_count); | atomic_inc_64(&sle->sle_meta_count); | ||||
else | else | ||||
atomic_inc_64(&sle->sle_data_count); | atomic_inc_64(&sle->sle_data_count); | ||||
} | } | ||||
mutex_enter(&spa->spa_scrub_lock); | mutex_enter(&spa->spa_scrub_lock); | ||||
spa->spa_scrub_inflight--; | spa->spa_load_verify_ios--; | ||||
cv_broadcast(&spa->spa_scrub_io_cv); | cv_broadcast(&spa->spa_scrub_io_cv); | ||||
mutex_exit(&spa->spa_scrub_lock); | mutex_exit(&spa->spa_scrub_lock); | ||||
} | } | ||||
/* | /* | ||||
* Maximum number of concurrent scrub i/os to create while verifying | * Maximum number of concurrent scrub i/os to create while verifying | ||||
* a pool while importing it. | * a pool while importing it. | ||||
*/ | */ | ||||
Show All 30 Lines | if (!spa_load_verify_metadata) | ||||
return (0); | return (0); | ||||
if (!BP_IS_METADATA(bp) && !spa_load_verify_data) | if (!BP_IS_METADATA(bp) && !spa_load_verify_data) | ||||
return (0); | return (0); | ||||
zio_t *rio = arg; | zio_t *rio = arg; | ||||
size_t size = BP_GET_PSIZE(bp); | size_t size = BP_GET_PSIZE(bp); | ||||
mutex_enter(&spa->spa_scrub_lock); | mutex_enter(&spa->spa_scrub_lock); | ||||
while (spa->spa_scrub_inflight >= spa_load_verify_maxinflight) | while (spa->spa_load_verify_ios >= spa_load_verify_maxinflight) | ||||
cv_wait(&spa->spa_scrub_io_cv, &spa->spa_scrub_lock); | cv_wait(&spa->spa_scrub_io_cv, &spa->spa_scrub_lock); | ||||
spa->spa_scrub_inflight++; | spa->spa_load_verify_ios++; | ||||
mutex_exit(&spa->spa_scrub_lock); | mutex_exit(&spa->spa_scrub_lock); | ||||
zio_nowait(zio_read(rio, spa, bp, abd_alloc_for_io(size, B_FALSE), size, | zio_nowait(zio_read(rio, spa, bp, abd_alloc_for_io(size, B_FALSE), size, | ||||
spa_load_verify_done, rio->io_private, ZIO_PRIORITY_SCRUB, | spa_load_verify_done, rio->io_private, ZIO_PRIORITY_SCRUB, | ||||
ZIO_FLAG_SPECULATIVE | ZIO_FLAG_CANFAIL | | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_CANFAIL | | ||||
ZIO_FLAG_SCRUB | ZIO_FLAG_RAW, zb)); | ZIO_FLAG_SCRUB | ZIO_FLAG_RAW, zb)); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 6,240 Lines • Show Last 20 Lines |