This helps write performance when setting the dirty threshold to tiny numbers. 3.4.0-rc2 3.4.0-rc2-btrfs4+ ------------ ------------------------ 96.92 -0.4% 96.54 bay/thresh=1000M/btrfs-100dd-1-3.4.0-rc2 98.47 +0.0% 98.50 bay/thresh=1000M/btrfs-10dd-1-3.4.0-rc2 99.38 -0.3% 99.06 bay/thresh=1000M/btrfs-1dd-1-3.4.0-rc2 98.04 -0.0% 98.02 bay/thresh=100M/btrfs-100dd-1-3.4.0-rc2 98.68 +0.3% 98.98 bay/thresh=100M/btrfs-10dd-1-3.4.0-rc2 99.34 -0.0% 99.31 bay/thresh=100M/btrfs-1dd-1-3.4.0-rc2 ==> 88.98 +9.6% 97.53 bay/thresh=10M/btrfs-10dd-1-3.4.0-rc2 ==> 86.99 +13.1% 98.39 bay/thresh=10M/btrfs-1dd-1-3.4.0-rc2 ==> 2.75 +2442.4% 69.88 bay/thresh=1M/btrfs-10dd-1-3.4.0-rc2 ==> 3.31 +2634.1% 90.54 bay/thresh=1M/btrfs-1dd-1-3.4.0-rc2 Signed-off-by: Fengguang Wu <fengguang.wu@xxxxxxxxx> --- fs/btrfs/disk-io.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- linux-next.orig/fs/btrfs/disk-io.c 2012-05-02 14:04:00.989262395 +0800 +++ linux-next/fs/btrfs/disk-io.c 2012-05-02 14:04:01.773262414 +0800 @@ -930,7 +930,8 @@ static int btree_writepages(struct addre /* this is a bit racy, but that's ok */ num_dirty = root->fs_info->dirty_metadata_bytes; - if (num_dirty < thresh) + if (num_dirty < min(thresh, + global_dirty_limit << (PAGE_CACHE_SHIFT-2))) return 0; } return btree_write_cache_pages(mapping, wbc); -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html