diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2013-11-03 12:06:40 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-11-20 20:42:11 -0500 |
commit | ba69994a40b242bef26ab2683ea84aa29e2e429f (patch) | |
tree | 9a2b0597ce5668821472606355f41cee8fd10f05 /fs/btrfs/async-thread.c | |
parent | 908960c6c0fb3b3ce3971dc0ca47b581d256b968 (diff) |
Btrfs: fix __btrfs_start_workers retval
__btrfs_start_workers returns 0 in case it raced with
btrfs_stop_workers and lost the race. This is wrong because worker in
this case is not allowed to start and is in fact destroyed. Return
-EINVAL instead.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs/async-thread.c')
-rw-r--r-- | fs/btrfs/async-thread.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c index 8aec751fa464..c1e0b0caf9cc 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c | |||
@@ -495,6 +495,7 @@ static int __btrfs_start_workers(struct btrfs_workers *workers) | |||
495 | spin_lock_irq(&workers->lock); | 495 | spin_lock_irq(&workers->lock); |
496 | if (workers->stopping) { | 496 | if (workers->stopping) { |
497 | spin_unlock_irq(&workers->lock); | 497 | spin_unlock_irq(&workers->lock); |
498 | ret = -EINVAL; | ||
498 | goto fail_kthread; | 499 | goto fail_kthread; |
499 | } | 500 | } |
500 | list_add_tail(&worker->worker_list, &workers->idle_list); | 501 | list_add_tail(&worker->worker_list, &workers->idle_list); |