diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-11-03 01:10:07 -0500 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-11-03 01:10:07 -0500 |
| commit | 7a53c7f56bbfc9b0ef892e68f5cfae3d902544d1 (patch) | |
| tree | 19dec256fc80ad06d631ece78b9eb68a457ce66b /fs/btrfs/async-thread.h | |
| parent | e57130698fe3dd2b7d617d90bbf86474473cb40c (diff) | |
| parent | 012abeea669ea49636cf952d13298bb68654146a (diff) | |
Merge commit 'v2.6.32-rc5' into for-linus
Diffstat (limited to 'fs/btrfs/async-thread.h')
| -rw-r--r-- | fs/btrfs/async-thread.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/btrfs/async-thread.h b/fs/btrfs/async-thread.h index 1b511c109db6..5077746cf85e 100644 --- a/fs/btrfs/async-thread.h +++ b/fs/btrfs/async-thread.h | |||
| @@ -64,6 +64,8 @@ struct btrfs_workers { | |||
| 64 | /* current number of running workers */ | 64 | /* current number of running workers */ |
| 65 | int num_workers; | 65 | int num_workers; |
| 66 | 66 | ||
| 67 | int num_workers_starting; | ||
| 68 | |||
| 67 | /* max number of workers allowed. changed by btrfs_start_workers */ | 69 | /* max number of workers allowed. changed by btrfs_start_workers */ |
| 68 | int max_workers; | 70 | int max_workers; |
| 69 | 71 | ||
| @@ -73,6 +75,16 @@ struct btrfs_workers { | |||
| 73 | /* force completions in the order they were queued */ | 75 | /* force completions in the order they were queued */ |
| 74 | int ordered; | 76 | int ordered; |
| 75 | 77 | ||
| 78 | /* more workers required, but in an interrupt handler */ | ||
| 79 | int atomic_start_pending; | ||
| 80 | |||
| 81 | /* | ||
| 82 | * are we allowed to sleep while starting workers or are we required | ||
| 83 | * to start them at a later time? If we can't sleep, this indicates | ||
| 84 | * which queue we need to use to schedule thread creation. | ||
| 85 | */ | ||
| 86 | struct btrfs_workers *atomic_worker_start; | ||
| 87 | |||
| 76 | /* list with all the work threads. The workers on the idle thread | 88 | /* list with all the work threads. The workers on the idle thread |
| 77 | * may be actively servicing jobs, but they haven't yet hit the | 89 | * may be actively servicing jobs, but they haven't yet hit the |
| 78 | * idle thresh limit above. | 90 | * idle thresh limit above. |
| @@ -90,6 +102,9 @@ struct btrfs_workers { | |||
| 90 | /* lock for finding the next worker thread to queue on */ | 102 | /* lock for finding the next worker thread to queue on */ |
| 91 | spinlock_t lock; | 103 | spinlock_t lock; |
| 92 | 104 | ||
| 105 | /* lock for the ordered lists */ | ||
| 106 | spinlock_t order_lock; | ||
| 107 | |||
| 93 | /* extra name for this worker, used for current->name */ | 108 | /* extra name for this worker, used for current->name */ |
| 94 | char *name; | 109 | char *name; |
| 95 | }; | 110 | }; |
| @@ -97,7 +112,8 @@ struct btrfs_workers { | |||
| 97 | int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work); | 112 | int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work); |
| 98 | int btrfs_start_workers(struct btrfs_workers *workers, int num_workers); | 113 | int btrfs_start_workers(struct btrfs_workers *workers, int num_workers); |
| 99 | int btrfs_stop_workers(struct btrfs_workers *workers); | 114 | int btrfs_stop_workers(struct btrfs_workers *workers); |
| 100 | void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max); | 115 | void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max, |
| 116 | struct btrfs_workers *async_starter); | ||
| 101 | int btrfs_requeue_work(struct btrfs_work *work); | 117 | int btrfs_requeue_work(struct btrfs_work *work); |
| 102 | void btrfs_set_work_high_prio(struct btrfs_work *work); | 118 | void btrfs_set_work_high_prio(struct btrfs_work *work); |
| 103 | #endif | 119 | #endif |
