From: Greg Kroah-Hartman Date: Wed, 29 Apr 2009 02:03:28 +0000 (-0700) Subject: a block patch for .27 and .28 X-Git-Tag: v2.6.27.22~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=842557fb864a3f666f8d7d3c484c785d488cb84f;p=thirdparty%2Fkernel%2Fstable-queue.git a block patch for .27 and .28 --- diff --git a/queue-2.6.27/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch b/queue-2.6.27/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch new file mode 100644 index 00000000000..2da96311f97 --- /dev/null +++ b/queue-2.6.27/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch @@ -0,0 +1,70 @@ +From 78f707bfc723552e8309b7c38a8d0cc51012e813 Mon Sep 17 00:00:00 2001 +From: Jens Axboe +Date: Tue, 17 Feb 2009 13:59:08 +0100 +Subject: block: revert part of 18ce3751ccd488c78d3827e9f6bf54e6322676fb + +From: Jens Axboe + +commit 78f707bfc723552e8309b7c38a8d0cc51012e813 upstream. + +The above commit added WRITE_SYNC and switched various places to using +that for committing writes that will be waited upon immediately after +submission. However, this causes a performance regression with AS and CFQ +for ext3 at least, since sync_dirty_buffer() will submit some writes with +WRITE_SYNC while ext3 has sumitted others dependent writes without the sync +flag set. This causes excessive anticipation/idling in the IO scheduler +because sync and async writes get interleaved, causing a big performance +regression for the below test case (which is meant to simulate sqlite +like behaviour). + +---- test case ---- + +int main(int argc, char **argv) +{ + + int fdes, i; + FILE *fp; + struct timeval start; + struct timeval end; + struct timeval res; + + gettimeofday(&start, NULL); + for (i=0; i +Signed-off-by: Greg Kroah-Hartman + +--- + fs/buffer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/buffer.c ++++ b/fs/buffer.c +@@ -3042,7 +3042,7 @@ int sync_dirty_buffer(struct buffer_head + if (test_clear_buffer_dirty(bh)) { + get_bh(bh); + bh->b_end_io = end_buffer_write_sync; +- ret = submit_bh(WRITE_SYNC, bh); ++ ret = submit_bh(WRITE, bh); + wait_on_buffer(bh); + if (buffer_eopnotsupp(bh)) { + clear_buffer_eopnotsupp(bh); diff --git a/queue-2.6.27/series b/queue-2.6.27/series index f7330c71b6a..3673e3de5e9 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -39,3 +39,4 @@ net-fix-sctp-breakage.patch 0093-agp-zero-pages-before-sending-to-userspace.patch 0096-hugetlbfs-return-negative-error-code-for-bad-mount.patch kprobes-fix-locking-imbalance-in-kretprobes.patch +block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch diff --git a/queue-2.6.28/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch b/queue-2.6.28/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch new file mode 100644 index 00000000000..2da96311f97 --- /dev/null +++ b/queue-2.6.28/block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch @@ -0,0 +1,70 @@ +From 78f707bfc723552e8309b7c38a8d0cc51012e813 Mon Sep 17 00:00:00 2001 +From: Jens Axboe +Date: Tue, 17 Feb 2009 13:59:08 +0100 +Subject: block: revert part of 18ce3751ccd488c78d3827e9f6bf54e6322676fb + +From: Jens Axboe + +commit 78f707bfc723552e8309b7c38a8d0cc51012e813 upstream. + +The above commit added WRITE_SYNC and switched various places to using +that for committing writes that will be waited upon immediately after +submission. However, this causes a performance regression with AS and CFQ +for ext3 at least, since sync_dirty_buffer() will submit some writes with +WRITE_SYNC while ext3 has sumitted others dependent writes without the sync +flag set. This causes excessive anticipation/idling in the IO scheduler +because sync and async writes get interleaved, causing a big performance +regression for the below test case (which is meant to simulate sqlite +like behaviour). + +---- test case ---- + +int main(int argc, char **argv) +{ + + int fdes, i; + FILE *fp; + struct timeval start; + struct timeval end; + struct timeval res; + + gettimeofday(&start, NULL); + for (i=0; i +Signed-off-by: Greg Kroah-Hartman + +--- + fs/buffer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/buffer.c ++++ b/fs/buffer.c +@@ -3042,7 +3042,7 @@ int sync_dirty_buffer(struct buffer_head + if (test_clear_buffer_dirty(bh)) { + get_bh(bh); + bh->b_end_io = end_buffer_write_sync; +- ret = submit_bh(WRITE_SYNC, bh); ++ ret = submit_bh(WRITE, bh); + wait_on_buffer(bh); + if (buffer_eopnotsupp(bh)) { + clear_buffer_eopnotsupp(bh); diff --git a/queue-2.6.28/series b/queue-2.6.28/series index c44e4327931..9f85c5dfafa 100644 --- a/queue-2.6.28/series +++ b/queue-2.6.28/series @@ -50,3 +50,4 @@ kprobes-fix-locking-imbalance-in-kretprobes.patch 0024-r8169-Reset-IntrStatus-after-chip-reset.patch 0093-agp-zero-pages-before-sending-to-userspace.patch 0096-hugetlbfs-return-negative-error-code-for-bad-mount.patch +block-revert-part-of-18ce3751ccd488c78d3827e9f6bf54e6322676fb.patch