void mdt_ck_thread_stop(struct mdt_device *mdt) { struct ptlrpc_thread *thread = &mdt->mdt_ck_thread; if (!thread_is_running(thread)) return; thread_set_flags(thread, SVC_STOPPING); wake_up(&thread->t_ctl_waitq); l_wait_condition(thread->t_ctl_waitq, thread_is_stopped(thread)); }
int mdt_ck_thread_start(struct mdt_device *mdt) { struct ptlrpc_thread *thread = &mdt->mdt_ck_thread; struct task_struct *task; init_waitqueue_head(&thread->t_ctl_waitq); task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck"); if (IS_ERR(task)) { CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task)); return PTR_ERR(task); } l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread)); 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; }