summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2015-09-02 13:49:49 -0700
committerNeilBrown <neilb@suse.com>2015-11-01 13:48:26 +1100
commit828cbe989e4f5c8666cb3d99918b03666ccde0a0 (patch)
treed0a2523905dbada0b75104e22e6b8d93fec77a78 /drivers/md/raid5.c
parent509ffec7089d10521ac91d4537b789d76103b4c0 (diff)
downloadop-kernel-dev-828cbe989e4f5c8666cb3d99918b03666ccde0a0.zip
op-kernel-dev-828cbe989e4f5c8666cb3d99918b03666ccde0a0.tar.gz
raid5-cache: optimize FLUSH IO with log enabled
With log enabled, bio is written to raid disks after the bio is settled down in log disk. The recovery guarantees we can recovery the bio data from log disk, so we we skip FLUSH IO. Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: NeilBrown <neilb@suse.com>
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 46042c7..a622ccb 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5146,8 +5146,15 @@ static void make_request(struct mddev *mddev, struct bio * bi)
bool do_prepare;
if (unlikely(bi->bi_rw & REQ_FLUSH)) {
- md_flush_request(mddev, bi);
- return;
+ int ret = r5l_handle_flush_request(conf->log, bi);
+
+ if (ret == 0)
+ return;
+ if (ret == -ENODEV) {
+ md_flush_request(mddev, bi);
+ return;
+ }
+ /* ret == -EAGAIN, fallback */
}
md_write_start(mddev, bi);
OpenPOWER on IntegriCloud