diff options
author | Josef Bacik <josef@redhat.com> | 2011-11-18 14:37:27 -0500 |
---|---|---|
committer | Josef Bacik <josef@redhat.com> | 2011-12-15 11:04:21 -0500 |
commit | 0dc3b84a73267f47a75468f924f5d58a840e3152 (patch) | |
tree | 0c2f64c2884a0de54e3fe15971e960f71a722afb /fs/btrfs/async-thread.h | |
parent | 5dbc8fca8ef5d719014f22345d990e957dcfc692 (diff) | |
download | linux-3.10-0dc3b84a73267f47a75468f924f5d58a840e3152.tar.gz linux-3.10-0dc3b84a73267f47a75468f924f5d58a840e3152.tar.bz2 linux-3.10-0dc3b84a73267f47a75468f924f5d58a840e3152.zip |
Btrfs: fix num_workers_starting bug and other bugs in async thread
Al pointed out we have some random problems with the way we account for
num_workers_starting in the async thread stuff. First of all we need to make
sure to decrement num_workers_starting if we fail to start the worker, so make
__btrfs_start_workers do this. Also fix __btrfs_start_workers so that it
doesn't call btrfs_stop_workers(), there is no point in stopping everybody if we
failed to create a worker. Also check_pending_worker_creates needs to call
__btrfs_start_work in it's work function since it already increments
num_workers_starting.
People only start one worker at a time, so get rid of the num_workers argument
everywhere, and make btrfs_queue_worker a void since it will always succeed.
Thanks,
Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/async-thread.h')
-rw-r--r-- | fs/btrfs/async-thread.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/async-thread.h b/fs/btrfs/async-thread.h index 5077746cf85..f34cc31fa3c 100644 --- a/fs/btrfs/async-thread.h +++ b/fs/btrfs/async-thread.h @@ -109,8 +109,8 @@ struct btrfs_workers { char *name; }; -int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work); -int btrfs_start_workers(struct btrfs_workers *workers, int num_workers); +void btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work); +int btrfs_start_workers(struct btrfs_workers *workers); int btrfs_stop_workers(struct btrfs_workers *workers); void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max, struct btrfs_workers *async_starter); |