Btrfs: check for an extent_op on the locked ref
We could have possibly added an extent_op to the locked_ref while we dropped locked_ref->lock, so check for this case as well and loop around. Otherwise we could lose flag updates which would lead to extent tree corruption. Thanks, cc: stable@vger.kernel.org Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
Родитель
ba8b028933
Коммит
573a075567
|
@ -2444,7 +2444,8 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
|
||||||
spin_unlock(&locked_ref->lock);
|
spin_unlock(&locked_ref->lock);
|
||||||
spin_lock(&delayed_refs->lock);
|
spin_lock(&delayed_refs->lock);
|
||||||
spin_lock(&locked_ref->lock);
|
spin_lock(&locked_ref->lock);
|
||||||
if (rb_first(&locked_ref->ref_root)) {
|
if (rb_first(&locked_ref->ref_root) ||
|
||||||
|
locked_ref->extent_op) {
|
||||||
spin_unlock(&locked_ref->lock);
|
spin_unlock(&locked_ref->lock);
|
||||||
spin_unlock(&delayed_refs->lock);
|
spin_unlock(&delayed_refs->lock);
|
||||||
continue;
|
continue;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче