[PATCHSET] block: reimplement FLUSH/FUA to support merge

Tejun Heo
2011-01-21T16:00:20Z

Hello,

This patchset reimplements (yeah, once more) so that FLUSH/FUA
requests can be merged. This is inspired by Darrick's patches to
merge multiple zero-data flushes which helps workloads with highly
concurrent fsync requests.

For more information, please read the patch description on the third
patch.

0001-block-add-REQ_FLUSH_SEQ.patch
0002-block-improve-flush-bio-completion.patch
0003-block-reimplement-FLUSH-FUA-to-support-merge.patch

0001-0002 prepare for the reimplementation. 0003 reimplements.

Tested on FLUSH+FUA, FLUSH, and no FLUSH configurations. Works pretty
solid for me. Darrick says that preliminary performance test looks
okay. Darrick, please use this version for further testing as I fixed
a few problems.

This patchset is based on 2.6.38-rc1 (2b1caf6e) and available in the
following git branch,

git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git block-flush-merge

and contains the following changes.

block/blk-core.c | 56 ++---
block/blk-flush.c | 441 +++++++++++++++++++++++++++++++---------------
block/blk.h | 12 -
block/elevator.c | 7
include/linux/blk_types.h | 2
include/linux/blkdev.h | 18 +
include/linux/elevator.h | 1
7 files changed, 355 insertions(+), 182 deletions(-)

Thanks.

--
tejun