diff options
author | Shaohua Li <shli@fb.com> | 2015-09-02 13:49:49 -0700 |
---|---|---|
committer | NeilBrown <neilb@suse.com> | 2015-11-01 13:48:26 +1100 |
commit | 828cbe989e4f5c8666cb3d99918b03666ccde0a0 (patch) | |
tree | d0a2523905dbada0b75104e22e6b8d93fec77a78 /drivers/md/raid5.c | |
parent | 509ffec7089d10521ac91d4537b789d76103b4c0 (diff) | |
download | op-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.c | 11 |
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); |