bcache: don't set max writeback rate if gc is running
authorColy Li <colyli@suse.de>
Fri, 28 Jun 2019 11:59:24 +0000 (19:59 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 28 Jun 2019 13:39:13 +0000 (07:39 -0600)
commit141df8bb5dc052f605de8f48a7aa10290e1384ae
tree355b2bb99b0584a0f09c00304e4e5b2252f5bb9f
parenta5b47a40bed8b19e956872fb55097d676a68f59e
bcache: don't set max writeback rate if gc is running

When gc is running, user space I/O processes may wait inside
bcache code, so no new I/O coming. Indeed this is not a real idle
time, maximum writeback rate should not be set in such situation.
Otherwise a faster writeback thread may compete locks with gc thread
and makes garbage collection slower, which results a longer I/O
freeze period.

This patch checks c->gc_mark_valid in set_at_max_writeback_rate(). If
c->gc_mark_valid is 0 (gc running), set_at_max_writeback_rate() returns
false, then update_writeback_rate() will not set writeback rate to
maximum value even c->idle_counter reaches an idle threshold.

Now writeback thread won't interfere gc thread performance.

Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/writeback.c