Lines Matching refs:thi

301 	struct drbd_thread *thi = (struct drbd_thread *) arg;  in drbd_thread_setup()  local
302 struct drbd_resource *resource = thi->resource; in drbd_thread_setup()
307 thi->name[0], in drbd_thread_setup()
313 retval = thi->function(thi); in drbd_thread_setup()
315 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_setup()
327 if (thi->t_state == RESTARTING) { in drbd_thread_setup()
328 drbd_info(resource, "Restarting %s thread\n", thi->name); in drbd_thread_setup()
329 thi->t_state = RUNNING; in drbd_thread_setup()
330 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_setup()
334 thi->task = NULL; in drbd_thread_setup()
335 thi->t_state = NONE; in drbd_thread_setup()
337 complete_all(&thi->stop); in drbd_thread_setup()
338 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_setup()
344 if (thi->connection) in drbd_thread_setup()
345 kref_put(&thi->connection->kref, drbd_destroy_connection); in drbd_thread_setup()
351 static void drbd_thread_init(struct drbd_resource *resource, struct drbd_thread *thi, in drbd_thread_init() argument
354 spin_lock_init(&thi->t_lock); in drbd_thread_init()
355 thi->task = NULL; in drbd_thread_init()
356 thi->t_state = NONE; in drbd_thread_init()
357 thi->function = func; in drbd_thread_init()
358 thi->resource = resource; in drbd_thread_init()
359 thi->connection = NULL; in drbd_thread_init()
360 thi->name = name; in drbd_thread_init()
363 int drbd_thread_start(struct drbd_thread *thi) in drbd_thread_start() argument
365 struct drbd_resource *resource = thi->resource; in drbd_thread_start()
371 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_start()
373 switch (thi->t_state) { in drbd_thread_start()
376 thi->name, current->comm, current->pid); in drbd_thread_start()
381 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
386 if (thi->connection) in drbd_thread_start()
387 kref_get(&thi->connection->kref); in drbd_thread_start()
389 init_completion(&thi->stop); in drbd_thread_start()
390 thi->reset_cpu_mask = 1; in drbd_thread_start()
391 thi->t_state = RUNNING; in drbd_thread_start()
392 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
395 nt = kthread_create(drbd_thread_setup, (void *) thi, in drbd_thread_start()
396 "drbd_%c_%s", thi->name[0], thi->resource->name); in drbd_thread_start()
401 if (thi->connection) in drbd_thread_start()
402 kref_put(&thi->connection->kref, drbd_destroy_connection); in drbd_thread_start()
407 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_start()
408 thi->task = nt; in drbd_thread_start()
409 thi->t_state = RUNNING; in drbd_thread_start()
410 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
414 thi->t_state = RESTARTING; in drbd_thread_start()
416 thi->name, current->comm, current->pid); in drbd_thread_start()
421 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
429 void _drbd_thread_stop(struct drbd_thread *thi, int restart, int wait) in _drbd_thread_stop() argument
436 spin_lock_irqsave(&thi->t_lock, flags); in _drbd_thread_stop()
438 if (thi->t_state == NONE) { in _drbd_thread_stop()
439 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
441 drbd_thread_start(thi); in _drbd_thread_stop()
445 if (thi->t_state != ns) { in _drbd_thread_stop()
446 if (thi->task == NULL) { in _drbd_thread_stop()
447 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
451 thi->t_state = ns; in _drbd_thread_stop()
453 init_completion(&thi->stop); in _drbd_thread_stop()
454 if (thi->task != current) in _drbd_thread_stop()
455 send_sig(DRBD_SIGKILL, thi->task, 1); in _drbd_thread_stop()
458 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
461 wait_for_completion(&thi->stop); in _drbd_thread_stop()
509 void drbd_thread_current_set_cpu(struct drbd_thread *thi) in drbd_thread_current_set_cpu() argument
511 struct drbd_resource *resource = thi->resource; in drbd_thread_current_set_cpu()
514 if (!thi->reset_cpu_mask) in drbd_thread_current_set_cpu()
516 thi->reset_cpu_mask = 0; in drbd_thread_current_set_cpu()