diff options
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 4ec9a2ee0f9d..31be4ed8b63e 100644 --- a/fs/btrfs/async-thread.h +++ b/fs/btrfs/async-thread.h | |||
@@ -37,10 +37,16 @@ struct btrfs_worker_thread; | |||
37 | */ | 37 | */ |
38 | struct btrfs_work { | 38 | struct btrfs_work { |
39 | /* | 39 | /* |
40 | * only func should be set to the function you want called | 40 | * func should be set to the function you want called |
41 | * your work struct is passed as the only arg | 41 | * your work struct is passed as the only arg |
42 | * | ||
43 | * ordered_func must be set for work sent to an ordered work queue, | ||
44 | * and it is called to complete a given work item in the same | ||
45 | * order they were sent to the queue. | ||
42 | */ | 46 | */ |
43 | void (*func)(struct btrfs_work *work); | 47 | void (*func)(struct btrfs_work *work); |
48 | void (*ordered_func)(struct btrfs_work *work); | ||
49 | void (*ordered_free)(struct btrfs_work *work); | ||
44 | 50 | ||
45 | /* | 51 | /* |
46 | * flags should be set to zero. It is used to make sure the | 52 | * flags should be set to zero. It is used to make sure the |
@@ -51,6 +57,7 @@ struct btrfs_work { | |||
51 | /* don't touch these */ | 57 | /* don't touch these */ |
52 | struct btrfs_worker_thread *worker; | 58 | struct btrfs_worker_thread *worker; |
53 | struct list_head list; | 59 | struct list_head list; |
60 | struct list_head order_list; | ||
54 | }; | 61 | }; |
55 | 62 | ||
56 | struct btrfs_workers { | 63 | struct btrfs_workers { |
@@ -63,6 +70,9 @@ struct btrfs_workers { | |||
63 | /* once a worker has this many requests or fewer, it is idle */ | 70 | /* once a worker has this many requests or fewer, it is idle */ |
64 | int idle_thresh; | 71 | int idle_thresh; |
65 | 72 | ||
73 | /* force completions in the order they were queued */ | ||
74 | int ordered; | ||
75 | |||
66 | /* list with all the work threads. The workers on the idle thread | 76 | /* list with all the work threads. The workers on the idle thread |
67 | * may be actively servicing jobs, but they haven't yet hit the | 77 | * may be actively servicing jobs, but they haven't yet hit the |
68 | * idle thresh limit above. | 78 | * idle thresh limit above. |
@@ -70,6 +80,12 @@ struct btrfs_workers { | |||
70 | struct list_head worker_list; | 80 | struct list_head worker_list; |
71 | struct list_head idle_list; | 81 | struct list_head idle_list; |
72 | 82 | ||
83 | /* | ||
84 | * when operating in ordered mode, this maintains the list | ||
85 | * of work items waiting for completion | ||
86 | */ | ||
87 | struct list_head order_list; | ||
88 | |||
73 | /* lock for finding the next worker thread to queue on */ | 89 | /* lock for finding the next worker thread to queue on */ |
74 | spinlock_t lock; | 90 | spinlock_t lock; |
75 | 91 | ||