int init_lnet(void) { int rc; ENTRY; cfs_mutex_init(&lnet_config_mutex); rc = LNetInit(); if (rc != 0) { CERROR("LNetInit: error %d\n", rc); RETURN(rc); } rc = libcfs_register_ioctl(&lnet_ioctl_handler); LASSERT (rc == 0); if (config_on_load) { /* Have to schedule a separate thread to avoid deadlocking * in modload */ (void) cfs_create_thread(lnet_configure, NULL, 0); } RETURN(0); }
int lnet_acceptor_start(void) { int rc; long rc2; long secure; LASSERT (lnet_acceptor_state.pta_sock == NULL); rc = lnet_acceptor_get_tunables(); if (rc != 0) return rc; #ifndef __KERNEL__ /* Do nothing if we're liblustre clients */ if ((the_lnet.ln_pid & LNET_PID_USERFLAG) != 0) return 0; #endif cfs_mt_init_completion(&lnet_acceptor_state.pta_signal); rc = accept2secure(accept_type, &secure); if (rc <= 0) { cfs_mt_fini_completion(&lnet_acceptor_state.pta_signal); return rc; } if (lnet_count_acceptor_nis() == 0) /* not required */ return 0; rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure); if (rc2 < 0) { CERROR("Can't start acceptor thread: %d\n", rc); cfs_mt_fini_completion(&lnet_acceptor_state.pta_signal); return -ESRCH; } /* wait for acceptor to startup */ cfs_mt_wait_for_completion(&lnet_acceptor_state.pta_signal); if (!lnet_acceptor_state.pta_shutdown) { /* started OK */ LASSERT (lnet_acceptor_state.pta_sock != NULL); return 0; } LASSERT (lnet_acceptor_state.pta_sock == NULL); cfs_mt_fini_completion(&lnet_acceptor_state.pta_signal); return -ENETDOWN; }
int osp_init_precreate(struct osp_device *d) { struct l_wait_info lwi = { 0 }; int rc; ENTRY; /* initially precreation isn't ready */ d->opd_pre_status = -EAGAIN; fid_zero(&d->opd_pre_used_fid); d->opd_pre_used_fid.f_oid = 1; fid_zero(&d->opd_pre_last_created_fid); d->opd_pre_last_created_fid.f_oid = 1; d->opd_pre_reserved = 0; d->opd_got_disconnected = 1; d->opd_pre_grow_slow = 0; d->opd_pre_grow_count = OST_MIN_PRECREATE; d->opd_pre_min_grow_count = OST_MIN_PRECREATE; d->opd_pre_max_grow_count = OST_MAX_PRECREATE; spin_lock_init(&d->opd_pre_lock); cfs_waitq_init(&d->opd_pre_waitq); cfs_waitq_init(&d->opd_pre_user_waitq); cfs_waitq_init(&d->opd_pre_thread.t_ctl_waitq); /* * Initialize statfs-related things */ d->opd_statfs_maxage = 5; /* default update interval */ d->opd_statfs_fresh_till = cfs_time_shift(-1000); CDEBUG(D_OTHER, "current %llu, fresh till %llu\n", (unsigned long long)cfs_time_current(), (unsigned long long)d->opd_statfs_fresh_till); cfs_timer_init(&d->opd_statfs_timer, osp_statfs_timer_cb, d); /* * start thread handling precreation and statfs updates */ rc = cfs_create_thread(osp_precreate_thread, d, 0); if (rc < 0) { CERROR("can't start precreate thread %d\n", rc); RETURN(rc); } l_wait_event(d->opd_pre_thread.t_ctl_waitq, osp_precreate_running(d) || osp_precreate_stopped(d), &lwi); RETURN(0); }
int mdt_ck_thread_start(struct mdt_device *mdt) { struct ptlrpc_thread *thread = &mdt->mdt_ck_thread; int rc; cfs_waitq_init(&thread->t_ctl_waitq); rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS); if (rc < 0) { CERROR("cannot start mdt_ck thread, rc = %d\n", rc); return rc; } l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread)); return 0; }
static void lcw_dispatch_start(void) { int rc; ENTRY; LASSERT(lcw_refcount == 1); cfs_init_completion(&lcw_stop_completion); cfs_init_completion(&lcw_start_completion); cfs_waitq_init(&lcw_event_waitq); CDEBUG(D_INFO, "starting dispatch thread\n"); rc = cfs_create_thread(lcw_dispatch_main, NULL, 0); if (rc < 0) { CERROR("error spawning watchdog dispatch thread: %d\n", rc); EXIT; return; } cfs_wait_for_completion(&lcw_start_completion); CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n"); EXIT; }