mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 21:30:43 +00:00
Btrfs: fix worker lock misuse in find_worker
Dan Carpenter noticed that we were doing a double unlock on the worker lock, and sometimes picking a worker thread without the lock held. This fixes both errors. Signed-off-by: Chris Mason <chris.mason@oracle.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
This commit is contained in:
parent
d85c8a6f1b
commit
8d532b2afb
@ -563,8 +563,8 @@ static struct btrfs_worker_thread *find_worker(struct btrfs_workers *workers)
|
||||
struct list_head *fallback;
|
||||
int ret;
|
||||
|
||||
again:
|
||||
spin_lock_irqsave(&workers->lock, flags);
|
||||
again:
|
||||
worker = next_worker(workers);
|
||||
|
||||
if (!worker) {
|
||||
@ -579,6 +579,7 @@ again:
|
||||
spin_unlock_irqrestore(&workers->lock, flags);
|
||||
/* we're below the limit, start another worker */
|
||||
ret = __btrfs_start_workers(workers);
|
||||
spin_lock_irqsave(&workers->lock, flags);
|
||||
if (ret)
|
||||
goto fallback;
|
||||
goto again;
|
||||
|
Loading…
Reference in New Issue
Block a user