btrfs: lower the dirty balance poll interval
authorWu Fengguang <fengguang.wu@intel.com>
Fri, 16 Dec 2011 17:32:57 +0000 (12:32 -0500)
committerChris Mason <chris.mason@oracle.com>
Fri, 16 Dec 2011 17:32:57 +0000 (12:32 -0500)
Tests show that the original large intervals can easily make the dirty
limit exceeded on 100 concurrent dd's. So adapt to as large as the
next check point selected by the dirty throttling algorithm.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/file.c

index dafdfa059bf66a489bd3d858990b9025fd50a72f..52305a885c3fc9130e3129a8424c47b3ebdcd079 100644 (file)
@@ -1167,6 +1167,8 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
        nrptrs = min((iov_iter_count(i) + PAGE_CACHE_SIZE - 1) /
                     PAGE_CACHE_SIZE, PAGE_CACHE_SIZE /
                     (sizeof(struct page *)));
+       nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);
+       nrptrs = max(nrptrs, 8);
        pages = kmalloc(nrptrs * sizeof(struct page *), GFP_KERNEL);
        if (!pages)
                return -ENOMEM;