Lines Matching refs:mmp
196 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_init() local
198 mutex_init(&mmp->mmp_thread_lock, NULL, MUTEX_DEFAULT, NULL); in mmp_init()
199 cv_init(&mmp->mmp_thread_cv, NULL, CV_DEFAULT, NULL); in mmp_init()
200 mutex_init(&mmp->mmp_io_lock, NULL, MUTEX_DEFAULT, NULL); in mmp_init()
201 mmp->mmp_kstat_id = 1; in mmp_init()
208 mmp->mmp_last_write = gethrtime(); in mmp_init()
209 mmp->mmp_delay = MSEC2NSEC(MMP_INTERVAL_OK(zfs_multihost_interval)); in mmp_init()
215 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_fini() local
217 mutex_destroy(&mmp->mmp_thread_lock); in mmp_fini()
218 cv_destroy(&mmp->mmp_thread_cv); in mmp_fini()
219 mutex_destroy(&mmp->mmp_io_lock); in mmp_fini()
223 mmp_thread_enter(mmp_thread_t *mmp, callb_cpr_t *cpr) in mmp_thread_enter() argument
225 CALLB_CPR_INIT(cpr, &mmp->mmp_thread_lock, callb_generic_cpr, FTAG); in mmp_thread_enter()
226 mutex_enter(&mmp->mmp_thread_lock); in mmp_thread_enter()
230 mmp_thread_exit(mmp_thread_t *mmp, kthread_t **mpp, callb_cpr_t *cpr) in mmp_thread_exit() argument
234 cv_broadcast(&mmp->mmp_thread_cv); in mmp_thread_exit()
242 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_thread_start() local
245 mutex_enter(&mmp->mmp_thread_lock); in mmp_thread_start()
246 if (!mmp->mmp_thread) { in mmp_thread_start()
247 mmp->mmp_thread = thread_create(NULL, 0, mmp_thread, in mmp_thread_start()
252 mutex_exit(&mmp->mmp_thread_lock); in mmp_thread_start()
259 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_thread_stop() local
261 mutex_enter(&mmp->mmp_thread_lock); in mmp_thread_stop()
262 mmp->mmp_thread_exiting = 1; in mmp_thread_stop()
263 cv_broadcast(&mmp->mmp_thread_cv); in mmp_thread_stop()
265 while (mmp->mmp_thread) { in mmp_thread_stop()
266 cv_wait(&mmp->mmp_thread_cv, &mmp->mmp_thread_lock); in mmp_thread_stop()
268 mutex_exit(&mmp->mmp_thread_lock); in mmp_thread_stop()
272 ASSERT(mmp->mmp_thread == NULL); in mmp_thread_stop()
273 mmp->mmp_thread_exiting = 0; in mmp_thread_stop()
418 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_update_uberblock() local
420 mutex_enter(&mmp->mmp_io_lock); in mmp_update_uberblock()
421 mmp->mmp_ub = *ub; in mmp_update_uberblock()
422 mmp->mmp_seq = 1; in mmp_update_uberblock()
423 mmp->mmp_ub.ub_timestamp = gethrestime_sec(); in mmp_update_uberblock()
425 mutex_exit(&mmp->mmp_io_lock); in mmp_update_uberblock()
437 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_write_uberblock() local
451 mutex_enter(&mmp->mmp_io_lock); in mmp_write_uberblock()
465 if (mmp->mmp_skip_error == error) { in mmp_write_uberblock()
471 mmp->mmp_skip_error = error; in mmp_write_uberblock()
482 mutex_exit(&mmp->mmp_io_lock); in mmp_write_uberblock()
488 if (mmp->mmp_skip_error != 0) { in mmp_write_uberblock()
489 mmp->mmp_skip_error = 0; in mmp_write_uberblock()
495 if (mmp->mmp_zio_root == NULL) in mmp_write_uberblock()
496 mmp->mmp_zio_root = zio_root(spa, NULL, NULL, in mmp_write_uberblock()
499 if (mmp->mmp_ub.ub_timestamp != gethrestime_sec()) { in mmp_write_uberblock()
505 mmp->mmp_ub.ub_timestamp = gethrestime_sec(); in mmp_write_uberblock()
506 mmp->mmp_seq = 1; in mmp_write_uberblock()
509 ub = &mmp->mmp_ub; in mmp_write_uberblock()
511 ub->ub_mmp_delay = mmp->mmp_delay; in mmp_write_uberblock()
512 ub->ub_mmp_config = MMP_SEQ_SET(mmp->mmp_seq) | in mmp_write_uberblock()
517 vd->vdev_mmp_kstat_id = mmp->mmp_kstat_id; in mmp_write_uberblock()
519 zio_t *zio = zio_null(mmp->mmp_zio_root, spa, NULL, NULL, NULL, flags); in mmp_write_uberblock()
524 mmp->mmp_seq++; in mmp_write_uberblock()
525 mmp->mmp_kstat_id++; in mmp_write_uberblock()
526 mutex_exit(&mmp->mmp_io_lock); in mmp_write_uberblock()
533 VDEV_UBERBLOCK_SIZE(vd), mmp_write_done, mmp, in mmp_write_uberblock()
549 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_thread() local
565 mmp_thread_enter(mmp, &cpr); in mmp_thread()
567 while (!mmp->mmp_thread_exiting) { in mmp_thread()
632 mutex_enter(&mmp->mmp_io_lock); in mmp_thread()
633 mmp->mmp_last_write = gethrtime(); in mmp_thread()
634 mmp->mmp_delay = mmp_interval; in mmp_thread()
635 mutex_exit(&mmp->mmp_io_lock); in mmp_thread()
643 mutex_enter(&mmp->mmp_io_lock); in mmp_thread()
644 mmp->mmp_delay = 0; in mmp_thread()
645 mutex_exit(&mmp->mmp_io_lock); in mmp_thread()
653 (gethrtime() - mmp->mmp_last_write) > mmp_fail_ns) { in mmp_thread()
658 (u_longlong_t)mmp->mmp_last_write, in mmp_thread()
666 NSEC2MSEC(gethrtime() - mmp->mmp_last_write), in mmp_thread()
681 (void) cv_timedwait_sig_hrtime(&mmp->mmp_thread_cv, in mmp_thread()
682 &mmp->mmp_thread_lock, next_time); in mmp_thread()
683 CALLB_CPR_SAFE_END(&cpr, &mmp->mmp_thread_lock); in mmp_thread()
687 if (mmp->mmp_zio_root) in mmp_thread()
688 zio_wait(mmp->mmp_zio_root); in mmp_thread()
690 mmp->mmp_zio_root = NULL; in mmp_thread()
691 mmp_thread_exit(mmp, &mmp->mmp_thread, &cpr); in mmp_thread()
704 mmp_thread_t *mmp = &spa->spa_mmp; in mmp_signal_thread() local
706 mutex_enter(&mmp->mmp_thread_lock); in mmp_signal_thread()
707 if (mmp->mmp_thread) in mmp_signal_thread()
708 cv_broadcast(&mmp->mmp_thread_cv); in mmp_signal_thread()
709 mutex_exit(&mmp->mmp_thread_lock); in mmp_signal_thread()