From: Edmund Nadolski <enadolski@suse.com>
Subject: btrfs: add cond_resched() calls when resolving backrefs
References: bsc#974590 bsc#1030061 bsc#1022914 bsc#1017461
Git-commit: 9dd14fd6964e6db02346d5f472f915029728b8cf
Patch-mainline: v4.14-rc1
Since backref resolution is CPU-intensive, the cond_resched calls
should help alleviate soft lockup occurences.
Signed-off-by: Edmund Nadolski <enadolski@suse.com>
Signed-off-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 0c1de59..1bb0aa2 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -660,6 +660,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);
@@ -702,6 +703,7 @@ static int add_missing_keys(struct btrfs_fs_info *fs_info,
btrfs_tree_read_unlock(eb);
free_extent_buffer(eb);
prelim_ref_insert(fs_info, &preftrees->indirect, ref);
+ cond_resched();
}
return 0;
}
@@ -1243,6 +1245,7 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
}
eie = NULL;
}
+ cond_resched();
}
out:
--
2.10.2