From enadolski@suse.com  Fri Jun 16 14:56:32 2017
From: Edmund Nadolski <enadolski@suse.com>
Subject: btrfs: add cond_resched() calls when resolving backrefs
References: bsc#974590 bsc#1030061 bsc#1022914 bsc#1017461
Patch-mainline: v4.14-rc1
Git-commit: 9dd14fd6964e6db02346d5f472f915029728b8cf

Since backref resolution is CPU-intensive, the cond_resched calls
should help alleviate soft lockup occurences.

Signed-off-by: Edmund Nadolski <enadolski@suse.com>
Acked-by: Jeff Mahoney <jeffm@suse.com>
---
 fs/btrfs/backref.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index 72a1ed3..657a06b 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -651,6 +651,7 @@ static int resolve_indirect_refs(struct btrfs_fs_info *fs_info,
 		prelim_ref_insert(fs_info, &preftrees->direct, ref);
 
 		ulist_reinit(parents);
+		cond_resched();
 	}
 out:
 	ulist_free(parents);
@@ -689,6 +690,7 @@ static int add_missing_keys(struct btrfs_fs_info *fs_info,
 			btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0);
 		btrfs_tree_read_unlock(eb);
 		free_extent_buffer(eb);
+		cond_resched();
 	}
 	return 0;
 }
@@ -1231,6 +1233,7 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
 		rb_erase(&ref->rbnode, &preftrees.direct.root);
 		preftrees.direct.count--;
 		release_pref(ref);
+		cond_resched();
 	}
 	WARN_ON(!RB_EMPTY_ROOT(&preftrees.direct.root));
 out:
-- 
2.10.2


