Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 573a0755 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

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: default avatarJosef Bacik <jbacik@fb.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent ba8b0289
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;