Lines Matching full:scl
457 spa_config_lock_t *scl = &spa->spa_config_lock[i];
458 mutex_init(&scl->scl_lock, NULL, MUTEX_DEFAULT, NULL);
459 cv_init(&scl->scl_cv, NULL, CV_DEFAULT, NULL);
460 scl->scl_writer = NULL;
461 scl->scl_write_wanted = 0;
462 scl->scl_count = 0;
470 spa_config_lock_t *scl = &spa->spa_config_lock[i];
471 mutex_destroy(&scl->scl_lock);
472 cv_destroy(&scl->scl_cv);
473 ASSERT(scl->scl_writer == NULL);
474 ASSERT(scl->scl_write_wanted == 0);
475 ASSERT(scl->scl_count == 0);
483 spa_config_lock_t *scl = &spa->spa_config_lock[i];
486 mutex_enter(&scl->scl_lock);
488 if (scl->scl_writer || scl->scl_write_wanted) {
489 mutex_exit(&scl->scl_lock);
495 ASSERT(scl->scl_writer != curthread);
496 if (scl->scl_count != 0) {
497 mutex_exit(&scl->scl_lock);
502 scl->scl_writer = curthread;
504 scl->scl_count++;
505 mutex_exit(&scl->scl_lock);
520 spa_config_lock_t *scl = &spa->spa_config_lock[i];
521 if (scl->scl_writer == curthread)
525 mutex_enter(&scl->scl_lock);
527 while (scl->scl_writer ||
528 (!mmp_flag && scl->scl_write_wanted)) {
529 cv_wait(&scl->scl_cv, &scl->scl_lock);
532 ASSERT(scl->scl_writer != curthread);
533 while (scl->scl_count != 0) {
534 scl->scl_write_wanted++;
535 cv_wait(&scl->scl_cv, &scl->scl_lock);
536 scl->scl_write_wanted--;
538 scl->scl_writer = curthread;
540 scl->scl_count++;
541 mutex_exit(&scl->scl_lock);
572 spa_config_lock_t *scl = &spa->spa_config_lock[i];
575 mutex_enter(&scl->scl_lock);
576 ASSERT(scl->scl_count > 0);
577 if (--scl->scl_count == 0) {
578 ASSERT(scl->scl_writer == NULL ||
579 scl->scl_writer == curthread);
580 scl->scl_writer = NULL; /* OK in either case */
581 cv_broadcast(&scl->scl_cv);
583 mutex_exit(&scl->scl_lock);
593 spa_config_lock_t *scl = &spa->spa_config_lock[i];
596 if ((rw == RW_READER && scl->scl_count != 0) ||
597 (rw == RW_WRITER && scl->scl_writer == curthread))