提交 51b98eff 编写于 作者: S Stanislaw Gruszka 提交者: Josef Bacik

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: NStanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: NJosef Bacik <jbacik@fb.com>
上级 dcfd5ad2
...@@ -262,18 +262,19 @@ static struct btrfs_work *get_next_work(struct btrfs_worker_thread *worker, ...@@ -262,18 +262,19 @@ static struct btrfs_work *get_next_work(struct btrfs_worker_thread *worker,
struct btrfs_work *work = NULL; struct btrfs_work *work = NULL;
struct list_head *cur = NULL; struct list_head *cur = NULL;
if (!list_empty(prio_head)) if (!list_empty(prio_head)) {
cur = prio_head->next; cur = prio_head->next;
goto out;
}
smp_mb(); smp_mb();
if (!list_empty(&worker->prio_pending)) if (!list_empty(&worker->prio_pending))
goto refill; goto refill;
if (!list_empty(head)) if (!list_empty(head)) {
cur = head->next; cur = head->next;
if (cur)
goto out; goto out;
}
refill: refill:
spin_lock_irq(&worker->lock); spin_lock_irq(&worker->lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册