diff options
author | Tejun Heo <tj@kernel.org> | 2012-07-19 16:52:53 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2012-07-22 13:11:01 -0400 |
commit | 9a2e03d8ed518a61154f18d83d6466628e519f94 (patch) | |
tree | ed5a66780409fd7ab1df70d799d8fb57a03477e6 /kernel | |
parent | 8db25e7891a47e03db6f04344a9c92be16e391bb (diff) |
kthread_worker: reorganize to prepare for flush_kthread_work() reimplementation
Make the following two non-functional changes.
* Separate out insert_kthread_work() from queue_kthread_work().
* Relocate struct kthread_flush_work and kthread_flush_work_fn()
definitions above flush_kthread_work().
v2: Added lockdep_assert_held() in insert_kthread_work() as suggested
by Andy Walls.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/kthread.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index 3d3de633702e..4bfbff36d447 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c | |||
@@ -378,6 +378,19 @@ repeat: | |||
378 | } | 378 | } |
379 | EXPORT_SYMBOL_GPL(kthread_worker_fn); | 379 | EXPORT_SYMBOL_GPL(kthread_worker_fn); |
380 | 380 | ||
381 | /* insert @work before @pos in @worker */ | ||
382 | static void insert_kthread_work(struct kthread_worker *worker, | ||
383 | struct kthread_work *work, | ||
384 | struct list_head *pos) | ||
385 | { | ||
386 | lockdep_assert_held(&worker->lock); | ||
387 | |||
388 | list_add_tail(&work->node, pos); | ||
389 | work->queue_seq++; | ||
390 | if (likely(worker->task)) | ||
391 | wake_up_process(worker->task); | ||
392 | } | ||
393 | |||
381 | /** | 394 | /** |
382 | * queue_kthread_work - queue a kthread_work | 395 | * queue_kthread_work - queue a kthread_work |
383 | * @worker: target kthread_worker | 396 | * @worker: target kthread_worker |
@@ -395,10 +408,7 @@ bool queue_kthread_work(struct kthread_worker *worker, | |||
395 | 408 | ||
396 | spin_lock_irqsave(&worker->lock, flags); | 409 | spin_lock_irqsave(&worker->lock, flags); |
397 | if (list_empty(&work->node)) { | 410 | if (list_empty(&work->node)) { |
398 | list_add_tail(&work->node, &worker->work_list); | 411 | insert_kthread_work(worker, work, &worker->work_list); |
399 | work->queue_seq++; | ||
400 | if (likely(worker->task)) | ||
401 | wake_up_process(worker->task); | ||
402 | ret = true; | 412 | ret = true; |
403 | } | 413 | } |
404 | spin_unlock_irqrestore(&worker->lock, flags); | 414 | spin_unlock_irqrestore(&worker->lock, flags); |
@@ -406,6 +416,18 @@ bool queue_kthread_work(struct kthread_worker *worker, | |||
406 | } | 416 | } |
407 | EXPORT_SYMBOL_GPL(queue_kthread_work); | 417 | EXPORT_SYMBOL_GPL(queue_kthread_work); |
408 | 418 | ||
419 | struct kthread_flush_work { | ||
420 | struct kthread_work work; | ||
421 | struct completion done; | ||
422 | }; | ||
423 | |||
424 | static void kthread_flush_work_fn(struct kthread_work *work) | ||
425 | { | ||
426 | struct kthread_flush_work *fwork = | ||
427 | container_of(work, struct kthread_flush_work, work); | ||
428 | complete(&fwork->done); | ||
429 | } | ||
430 | |||
409 | /** | 431 | /** |
410 | * flush_kthread_work - flush a kthread_work | 432 | * flush_kthread_work - flush a kthread_work |
411 | * @work: work to flush | 433 | * @work: work to flush |
@@ -436,18 +458,6 @@ void flush_kthread_work(struct kthread_work *work) | |||
436 | } | 458 | } |
437 | EXPORT_SYMBOL_GPL(flush_kthread_work); | 459 | EXPORT_SYMBOL_GPL(flush_kthread_work); |
438 | 460 | ||
439 | struct kthread_flush_work { | ||
440 | struct kthread_work work; | ||
441 | struct completion done; | ||
442 | }; | ||
443 | |||
444 | static void kthread_flush_work_fn(struct kthread_work *work) | ||
445 | { | ||
446 | struct kthread_flush_work *fwork = | ||
447 | container_of(work, struct kthread_flush_work, work); | ||
448 | complete(&fwork->done); | ||
449 | } | ||
450 | |||
451 | /** | 461 | /** |
452 | * flush_kthread_worker - flush all current works on a kthread_worker | 462 | * flush_kthread_worker - flush all current works on a kthread_worker |
453 | * @worker: worker to flush | 463 | * @worker: worker to flush |