Lines Matching refs:thi
328 struct drbd_thread *thi = (struct drbd_thread *) arg; in drbd_thread_setup() local
329 struct drbd_resource *resource = thi->resource; in drbd_thread_setup()
334 thi->name[0], in drbd_thread_setup()
338 retval = thi->function(thi); in drbd_thread_setup()
340 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_setup()
352 if (thi->t_state == RESTARTING) { in drbd_thread_setup()
353 drbd_info(resource, "Restarting %s thread\n", thi->name); in drbd_thread_setup()
354 thi->t_state = RUNNING; in drbd_thread_setup()
355 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_setup()
359 thi->task = NULL; in drbd_thread_setup()
360 thi->t_state = NONE; in drbd_thread_setup()
362 complete_all(&thi->stop); in drbd_thread_setup()
363 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_setup()
369 if (thi->connection) in drbd_thread_setup()
370 kref_put(&thi->connection->kref, drbd_destroy_connection); in drbd_thread_setup()
376 static void drbd_thread_init(struct drbd_resource *resource, struct drbd_thread *thi, in drbd_thread_init() argument
379 spin_lock_init(&thi->t_lock); in drbd_thread_init()
380 thi->task = NULL; in drbd_thread_init()
381 thi->t_state = NONE; in drbd_thread_init()
382 thi->function = func; in drbd_thread_init()
383 thi->resource = resource; in drbd_thread_init()
384 thi->connection = NULL; in drbd_thread_init()
385 thi->name = name; in drbd_thread_init()
388 int drbd_thread_start(struct drbd_thread *thi) in drbd_thread_start() argument
390 struct drbd_resource *resource = thi->resource; in drbd_thread_start()
396 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_start()
398 switch (thi->t_state) { in drbd_thread_start()
401 thi->name, current->comm, current->pid); in drbd_thread_start()
406 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
411 if (thi->connection) in drbd_thread_start()
412 kref_get(&thi->connection->kref); in drbd_thread_start()
414 init_completion(&thi->stop); in drbd_thread_start()
415 thi->reset_cpu_mask = 1; in drbd_thread_start()
416 thi->t_state = RUNNING; in drbd_thread_start()
417 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
420 nt = kthread_create(drbd_thread_setup, (void *) thi, in drbd_thread_start()
421 "drbd_%c_%s", thi->name[0], thi->resource->name); in drbd_thread_start()
426 if (thi->connection) in drbd_thread_start()
427 kref_put(&thi->connection->kref, drbd_destroy_connection); in drbd_thread_start()
432 spin_lock_irqsave(&thi->t_lock, flags); in drbd_thread_start()
433 thi->task = nt; in drbd_thread_start()
434 thi->t_state = RUNNING; in drbd_thread_start()
435 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
439 thi->t_state = RESTARTING; in drbd_thread_start()
441 thi->name, current->comm, current->pid); in drbd_thread_start()
446 spin_unlock_irqrestore(&thi->t_lock, flags); in drbd_thread_start()
454 void _drbd_thread_stop(struct drbd_thread *thi, int restart, int wait) in _drbd_thread_stop() argument
461 spin_lock_irqsave(&thi->t_lock, flags); in _drbd_thread_stop()
463 if (thi->t_state == NONE) { in _drbd_thread_stop()
464 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
466 drbd_thread_start(thi); in _drbd_thread_stop()
470 if (thi->t_state != ns) { in _drbd_thread_stop()
471 if (thi->task == NULL) { in _drbd_thread_stop()
472 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
476 thi->t_state = ns; in _drbd_thread_stop()
478 init_completion(&thi->stop); in _drbd_thread_stop()
479 if (thi->task != current) in _drbd_thread_stop()
480 force_sig(DRBD_SIGKILL, thi->task); in _drbd_thread_stop()
483 spin_unlock_irqrestore(&thi->t_lock, flags); in _drbd_thread_stop()
486 wait_for_completion(&thi->stop); in _drbd_thread_stop()
549 void drbd_thread_current_set_cpu(struct drbd_thread *thi) in drbd_thread_current_set_cpu() argument
551 struct drbd_resource *resource = thi->resource; in drbd_thread_current_set_cpu()
554 if (!thi->reset_cpu_mask) in drbd_thread_current_set_cpu()
556 thi->reset_cpu_mask = 0; in drbd_thread_current_set_cpu()