Btrfs: Add efficient dirty accounting to the extent_map tree
Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index de05525..eef4ab5 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -210,7 +210,7 @@
{
struct extent_map_tree *tree;
tree = &BTRFS_I(mapping->host)->extent_tree;
- if (wbc->sync_mode == WB_SYNC_NONE && current_is_pdflush()) {
+ if (wbc->sync_mode == WB_SYNC_NONE) {
u64 num_dirty;
u64 start = 0;
unsigned long thresh = 96 * 1024 * 1024;
@@ -218,6 +218,11 @@
if (wbc->for_kupdate)
return 0;
+ if (current_is_pdflush()) {
+ thresh = 96 * 1024 * 1024;
+ } else {
+ thresh = 8 * 1024 * 1024;
+ }
num_dirty = count_range_bits(tree, &start, thresh, EXTENT_DIRTY);
if (num_dirty < thresh) {
return 0;