Lines Matching refs:spa

93 spa_log_error(spa_t *spa, const zbookmark_phys_t *zb)  in spa_log_error()  argument
104 if (spa_load_state(spa) == SPA_LOAD_TRYIMPORT) in spa_log_error()
107 mutex_enter(&spa->spa_errlist_lock); in spa_log_error()
113 if (spa->spa_scrub_active || spa->spa_scrub_finished) in spa_log_error()
114 tree = &spa->spa_errlist_scrub; in spa_log_error()
116 tree = &spa->spa_errlist_last; in spa_log_error()
120 mutex_exit(&spa->spa_errlist_lock); in spa_log_error()
128 mutex_exit(&spa->spa_errlist_lock); in spa_log_error()
137 spa_get_errlog_size(spa_t *spa) in spa_get_errlog_size() argument
141 mutex_enter(&spa->spa_errlog_lock); in spa_get_errlog_size()
142 if (spa->spa_errlog_scrub != 0 && in spa_get_errlog_size()
143 zap_count(spa->spa_meta_objset, spa->spa_errlog_scrub, in spa_get_errlog_size()
147 if (spa->spa_errlog_last != 0 && !spa->spa_scrub_finished && in spa_get_errlog_size()
148 zap_count(spa->spa_meta_objset, spa->spa_errlog_last, in spa_get_errlog_size()
151 mutex_exit(&spa->spa_errlog_lock); in spa_get_errlog_size()
153 mutex_enter(&spa->spa_errlist_lock); in spa_get_errlog_size()
154 total += avl_numnodes(&spa->spa_errlist_last); in spa_get_errlog_size()
155 total += avl_numnodes(&spa->spa_errlist_scrub); in spa_get_errlog_size()
156 mutex_exit(&spa->spa_errlist_lock); in spa_get_errlog_size()
163 process_error_log(spa_t *spa, uint64_t obj, void *addr, size_t *count) in process_error_log() argument
172 for (zap_cursor_init(&zc, spa->spa_meta_objset, obj); in process_error_log()
232 spa_get_errlog(spa_t *spa, void *uaddr, size_t *count) in spa_get_errlog() argument
237 mutex_enter(&spa->spa_errlog_lock); in spa_get_errlog()
239 ret = process_error_log(spa, spa->spa_errlog_scrub, uaddr, count); in spa_get_errlog()
241 if (!ret && !spa->spa_scrub_finished) in spa_get_errlog()
242 ret = process_error_log(spa, spa->spa_errlog_last, uaddr, in spa_get_errlog()
245 mutex_enter(&spa->spa_errlist_lock); in spa_get_errlog()
247 ret = process_error_list(&spa->spa_errlist_scrub, uaddr, in spa_get_errlog()
250 ret = process_error_list(&spa->spa_errlist_last, uaddr, in spa_get_errlog()
252 mutex_exit(&spa->spa_errlist_lock); in spa_get_errlog()
254 mutex_exit(&spa->spa_errlog_lock); in spa_get_errlog()
266 spa_errlog_rotate(spa_t *spa) in spa_errlog_rotate() argument
268 mutex_enter(&spa->spa_errlist_lock); in spa_errlog_rotate()
269 spa->spa_scrub_finished = B_TRUE; in spa_errlog_rotate()
270 mutex_exit(&spa->spa_errlist_lock); in spa_errlog_rotate()
278 spa_errlog_drain(spa_t *spa) in spa_errlog_drain() argument
283 mutex_enter(&spa->spa_errlist_lock); in spa_errlog_drain()
286 while ((se = avl_destroy_nodes(&spa->spa_errlist_last, in spa_errlog_drain()
290 while ((se = avl_destroy_nodes(&spa->spa_errlist_scrub, in spa_errlog_drain()
294 mutex_exit(&spa->spa_errlist_lock); in spa_errlog_drain()
301 sync_error_list(spa_t *spa, avl_tree_t *t, uint64_t *obj, dmu_tx_t *tx) in sync_error_list() argument
310 *obj = zap_create(spa->spa_meta_objset, in sync_error_list()
320 (void) zap_update(spa->spa_meta_objset, in sync_error_list()
342 spa_errlog_sync(spa_t *spa, uint64_t txg) in spa_errlog_sync() argument
348 mutex_enter(&spa->spa_errlist_lock); in spa_errlog_sync()
353 if (avl_numnodes(&spa->spa_errlist_scrub) == 0 && in spa_errlog_sync()
354 avl_numnodes(&spa->spa_errlist_last) == 0 && in spa_errlog_sync()
355 !spa->spa_scrub_finished) { in spa_errlog_sync()
356 mutex_exit(&spa->spa_errlist_lock); in spa_errlog_sync()
360 spa_get_errlists(spa, &last, &scrub); in spa_errlog_sync()
361 scrub_finished = spa->spa_scrub_finished; in spa_errlog_sync()
362 spa->spa_scrub_finished = B_FALSE; in spa_errlog_sync()
364 mutex_exit(&spa->spa_errlist_lock); in spa_errlog_sync()
365 mutex_enter(&spa->spa_errlog_lock); in spa_errlog_sync()
367 tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg); in spa_errlog_sync()
372 sync_error_list(spa, &last, &spa->spa_errlog_last, tx); in spa_errlog_sync()
378 if (spa->spa_errlog_last != 0) in spa_errlog_sync()
379 VERIFY(dmu_object_free(spa->spa_meta_objset, in spa_errlog_sync()
380 spa->spa_errlog_last, tx) == 0); in spa_errlog_sync()
381 spa->spa_errlog_last = spa->spa_errlog_scrub; in spa_errlog_sync()
382 spa->spa_errlog_scrub = 0; in spa_errlog_sync()
384 sync_error_list(spa, &scrub, &spa->spa_errlog_last, tx); in spa_errlog_sync()
390 sync_error_list(spa, &scrub, &spa->spa_errlog_scrub, tx); in spa_errlog_sync()
395 (void) zap_update(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in spa_errlog_sync()
397 &spa->spa_errlog_last, tx); in spa_errlog_sync()
398 (void) zap_update(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in spa_errlog_sync()
400 &spa->spa_errlog_scrub, tx); in spa_errlog_sync()
404 mutex_exit(&spa->spa_errlog_lock); in spa_errlog_sync()