| From c81ffa32a214c84b08900fbc9d432187bd948eba Mon Sep 17 00:00:00 2001 |
| From: Tang Junhui <tang.junhui@zte.com.cn> |
| Date: Wed, 6 Sep 2017 14:25:52 +0800 |
| Subject: bcache: fix sequential large write IO bypass |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Tang Junhui <tang.junhui@zte.com.cn> |
| |
| commit c81ffa32a214c84b08900fbc9d432187bd948eba upstream. |
| |
| Sequential write IOs were tested with bs=1M by FIO in writeback cache |
| mode, these IOs were expected to be bypassed, but actually they did not. |
| We debug the code, and find in check_should_bypass(): |
| if (!congested && |
| mode == CACHE_MODE_WRITEBACK && |
| op_is_write(bio_op(bio)) && |
| (bio->bi_opf & REQ_SYNC)) |
| goto rescale |
| that means, If in writeback mode, a write IO with REQ_SYNC flag will not |
| be bypassed though it is a sequential large IO, It's not a correct thing |
| to do actually, so this patch remove these codes. |
| |
| Signed-off-by: tang.junhui <tang.junhui@zte.com.cn> |
| Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com> |
| Reviewed-by: Eric Wheeler <bcache@linux.ewheeler.net> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/bcache/request.c | 6 ------ |
| 1 file changed, 6 deletions(-) |
| |
| --- a/drivers/md/bcache/request.c |
| +++ b/drivers/md/bcache/request.c |
| @@ -400,12 +400,6 @@ static bool check_should_bypass(struct c |
| if (!congested && !dc->sequential_cutoff) |
| goto rescale; |
| |
| - if (!congested && |
| - mode == CACHE_MODE_WRITEBACK && |
| - op_is_write(bio->bi_opf) && |
| - op_is_sync(bio->bi_opf)) |
| - goto rescale; |
| - |
| spin_lock(&dc->io_lock); |
| |
| hlist_for_each_entry(i, iohash(dc, bio->bi_iter.bi_sector), hash) |