diff options
| author | Stanislaw Gruszka <[email protected]> | 2014-02-08 22:18:43 +0000 |
|---|---|---|
| committer | Josef Bacik <[email protected]> | 2014-03-10 19:16:36 +0000 |
| commit | 51b98effa4c673feaa7237ba87645ea60d8f3578 (patch) | |
| tree | 9549c3c23d36c058dceeddb9b66d830cbacc86dc /fs/btrfs/async-thread.c | |
| parent | Revert "Btrfs: remove transaction from btrfs send" (diff) | |
| download | kernel-51b98effa4c673feaa7237ba87645ea60d8f3578.tar.gz kernel-51b98effa4c673feaa7237ba87645ea60d8f3578.zip | |
btrfs: always choose work from prio_head first
In case we do not refill, we can overwrite cur pointer from prio_head
by one from not prioritized head, what looks as something that was
not intended.
This change make we always take works from prio_head first until it's
not empty.
Signed-off-by: Stanislaw Gruszka <[email protected]>
Signed-off-by: Josef Bacik <[email protected]>
Diffstat (limited to 'fs/btrfs/async-thread.c')
| -rw-r--r-- | fs/btrfs/async-thread.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c index c1e0b0caf9cc..0b78bf28ff5d 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c @@ -262,18 +262,19 @@ static struct btrfs_work *get_next_work(struct btrfs_worker_thread *worker, struct btrfs_work *work = NULL; struct list_head *cur = NULL; - if (!list_empty(prio_head)) + if (!list_empty(prio_head)) { cur = prio_head->next; + goto out; + } smp_mb(); if (!list_empty(&worker->prio_pending)) goto refill; - if (!list_empty(head)) + if (!list_empty(head)) { cur = head->next; - - if (cur) goto out; + } refill: spin_lock_irq(&worker->lock); |
