rll
ztest_rll_init(rll_t *rll)
rll->rll_writer = NULL;
rll->rll_readers = 0;
mutex_init(&rll->rll_lock, NULL, USYNC_THREAD, NULL);
cv_init(&rll->rll_cv, NULL, USYNC_THREAD, NULL);
ztest_rll_destroy(rll_t *rll)
ASSERT(rll->rll_writer == NULL);
ASSERT(rll->rll_readers == 0);
mutex_destroy(&rll->rll_lock);
cv_destroy(&rll->rll_cv);
ztest_rll_lock(rll_t *rll, rl_type_t type)
mutex_enter(&rll->rll_lock);
while (rll->rll_writer != NULL)
cv_wait(&rll->rll_cv, &rll->rll_lock);
rll->rll_readers++;
while (rll->rll_writer != NULL || rll->rll_readers)
cv_wait(&rll->rll_cv, &rll->rll_lock);
rll->rll_writer = curthread;
mutex_exit(&rll->rll_lock);
ztest_rll_unlock(rll_t *rll)
mutex_enter(&rll->rll_lock);
if (rll->rll_writer) {
ASSERT(rll->rll_readers == 0);
rll->rll_writer = NULL;
ASSERT(rll->rll_readers != 0);
ASSERT(rll->rll_writer == NULL);
rll->rll_readers--;
if (rll->rll_writer == NULL && rll->rll_readers == 0)
cv_broadcast(&rll->rll_cv);
mutex_exit(&rll->rll_lock);
rll_t *rll = &zd->zd_object_lock[object & (ZTEST_OBJECT_LOCKS - 1)];
ztest_rll_lock(rll, type);
rll_t *rll = &zd->zd_object_lock[object & (ZTEST_OBJECT_LOCKS - 1)];
ztest_rll_unlock(rll);
rll_t *rll = &zd->zd_range_lock[hash & (ZTEST_RANGE_LOCKS - 1)];
rl->rl_lock = rll;
ztest_rll_lock(rll, type);
rll_t *rll = rl->rl_lock;
ztest_rll_unlock(rll);