Lines Matching refs:scl

430 		spa_config_lock_t *scl = &spa->spa_config_lock[i];  in spa_config_lock_init()  local
431 mutex_init(&scl->scl_lock, NULL, MUTEX_DEFAULT, NULL); in spa_config_lock_init()
432 cv_init(&scl->scl_cv, NULL, CV_DEFAULT, NULL); in spa_config_lock_init()
433 zfs_refcount_create_untracked(&scl->scl_count); in spa_config_lock_init()
434 scl->scl_writer = NULL; in spa_config_lock_init()
435 scl->scl_write_wanted = 0; in spa_config_lock_init()
443 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_lock_destroy() local
444 mutex_destroy(&scl->scl_lock); in spa_config_lock_destroy()
445 cv_destroy(&scl->scl_cv); in spa_config_lock_destroy()
446 zfs_refcount_destroy(&scl->scl_count); in spa_config_lock_destroy()
447 ASSERT(scl->scl_writer == NULL); in spa_config_lock_destroy()
448 ASSERT(scl->scl_write_wanted == 0); in spa_config_lock_destroy()
456 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_tryenter() local
459 mutex_enter(&scl->scl_lock); in spa_config_tryenter()
461 if (scl->scl_writer || scl->scl_write_wanted) { in spa_config_tryenter()
462 mutex_exit(&scl->scl_lock); in spa_config_tryenter()
468 ASSERT(scl->scl_writer != curthread); in spa_config_tryenter()
469 if (!zfs_refcount_is_zero(&scl->scl_count)) { in spa_config_tryenter()
470 mutex_exit(&scl->scl_lock); in spa_config_tryenter()
475 scl->scl_writer = curthread; in spa_config_tryenter()
477 (void) zfs_refcount_add(&scl->scl_count, tag); in spa_config_tryenter()
478 mutex_exit(&scl->scl_lock); in spa_config_tryenter()
491 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_enter() local
492 if (scl->scl_writer == curthread) in spa_config_enter()
496 mutex_enter(&scl->scl_lock); in spa_config_enter()
498 while (scl->scl_writer || scl->scl_write_wanted) { in spa_config_enter()
499 cv_wait(&scl->scl_cv, &scl->scl_lock); in spa_config_enter()
502 ASSERT(scl->scl_writer != curthread); in spa_config_enter()
503 while (!zfs_refcount_is_zero(&scl->scl_count)) { in spa_config_enter()
504 scl->scl_write_wanted++; in spa_config_enter()
505 cv_wait(&scl->scl_cv, &scl->scl_lock); in spa_config_enter()
506 scl->scl_write_wanted--; in spa_config_enter()
508 scl->scl_writer = curthread; in spa_config_enter()
510 (void) zfs_refcount_add(&scl->scl_count, tag); in spa_config_enter()
511 mutex_exit(&scl->scl_lock); in spa_config_enter()
520 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_exit() local
523 mutex_enter(&scl->scl_lock); in spa_config_exit()
524 ASSERT(!zfs_refcount_is_zero(&scl->scl_count)); in spa_config_exit()
525 if (zfs_refcount_remove(&scl->scl_count, tag) == 0) { in spa_config_exit()
526 ASSERT(scl->scl_writer == NULL || in spa_config_exit()
527 scl->scl_writer == curthread); in spa_config_exit()
528 scl->scl_writer = NULL; /* OK in either case */ in spa_config_exit()
529 cv_broadcast(&scl->scl_cv); in spa_config_exit()
531 mutex_exit(&scl->scl_lock); in spa_config_exit()
541 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_held() local
545 !zfs_refcount_is_zero(&scl->scl_count)) || in spa_config_held()
546 (rw == RW_WRITER && scl->scl_writer == curthread)) in spa_config_held()