diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-09-29 13:31:31 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-09-29 13:31:31 -0400 |
commit | 55138e0bc29c0751e2152df9ad35deea542f29b3 (patch) | |
tree | 40dbc77de3e7a426030bd740ba8e2fd0d2171523 /fs/ext4/super.c | |
parent | 71780577306fd1e76c7a92e3b308db624d03adb9 (diff) |
ext4: Adjust ext4_da_writepages() to write out larger contiguous chunks
Work around problems in the writeback code to force out writebacks in
larger chunks than just 4mb, which is just too small. This also works
around limitations in the ext4 block allocator, which can't allocate
more than 2048 blocks at a time. So we need to defeat the round-robin
characteristics of the writeback code and try to write out as many
blocks in one inode before allowing the writeback code to move on to
another inode. We add a a new per-filesystem tunable,
max_writeback_mb_bump, which caps this to a default of 128mb per
inode.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r-- | fs/ext4/super.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index df539ba27779..16817737ba52 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -2197,6 +2197,7 @@ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan); | |||
2197 | EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs); | 2197 | EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs); |
2198 | EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request); | 2198 | EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request); |
2199 | EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc); | 2199 | EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc); |
2200 | EXT4_RW_ATTR_SBI_UI(max_writeback_mb_bump, s_max_writeback_mb_bump); | ||
2200 | 2201 | ||
2201 | static struct attribute *ext4_attrs[] = { | 2202 | static struct attribute *ext4_attrs[] = { |
2202 | ATTR_LIST(delayed_allocation_blocks), | 2203 | ATTR_LIST(delayed_allocation_blocks), |
@@ -2210,6 +2211,7 @@ static struct attribute *ext4_attrs[] = { | |||
2210 | ATTR_LIST(mb_order2_req), | 2211 | ATTR_LIST(mb_order2_req), |
2211 | ATTR_LIST(mb_stream_req), | 2212 | ATTR_LIST(mb_stream_req), |
2212 | ATTR_LIST(mb_group_prealloc), | 2213 | ATTR_LIST(mb_group_prealloc), |
2214 | ATTR_LIST(max_writeback_mb_bump), | ||
2213 | NULL, | 2215 | NULL, |
2214 | }; | 2216 | }; |
2215 | 2217 | ||
@@ -2679,6 +2681,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) | |||
2679 | } | 2681 | } |
2680 | 2682 | ||
2681 | sbi->s_stripe = ext4_get_stripe_size(sbi); | 2683 | sbi->s_stripe = ext4_get_stripe_size(sbi); |
2684 | sbi->s_max_writeback_mb_bump = 128; | ||
2682 | 2685 | ||
2683 | /* | 2686 | /* |
2684 | * set up enough so that it can read an inode | 2687 | * set up enough so that it can read an inode |