diff options
author | Jianpeng Ma <majianpeng@gmail.com> | 2012-08-02 09:50:39 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2012-08-02 09:50:39 +0200 |
commit | 53362a05ae683e12a20d9ffdf58a88094a0bed9d (patch) | |
tree | ec4791a0b8277ebb75608e7d22f16d646c1d60e1 /fs/block_dev.c | |
parent | block: split discard into aligned requests (diff) | |
download | linux-53362a05ae683e12a20d9ffdf58a88094a0bed9d.tar.xz linux-53362a05ae683e12a20d9ffdf58a88094a0bed9d.zip |
fs/block-dev.c:fix performance regression in O_DIRECT writes to md block devices
For regular file, write operaion used blk_plug function.But for block
file,write operation did not use blk_plug.
This patch is also for write-cache mode for block-device.
Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
Reviewed-by: NeilBrown <neilb@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/block_dev.c')
-rw-r--r-- | fs/block_dev.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 1e519195d45b..38e721b35d45 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1578,10 +1578,12 @@ ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t pos) { struct file *file = iocb->ki_filp; + struct blk_plug plug; ssize_t ret; BUG_ON(iocb->ki_pos != pos); + blk_start_plug(&plug); ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos); if (ret > 0 || ret == -EIOCBQUEUED) { ssize_t err; @@ -1590,6 +1592,7 @@ ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, if (err < 0 && ret > 0) ret = err; } + blk_finish_plug(&plug); return ret; } EXPORT_SYMBOL_GPL(blkdev_aio_write); |