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 <stf_xl@wp.pl> Signed-off-by: Josef Bacik <jbacik@fb.com>
This commit is contained in:
parent
dcfd5ad2fc
commit
51b98effa4
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue