Exemple #1
0
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);
}
Exemple #2
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);
}
Exemple #4
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;
}
Exemple #5
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;
}