]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
bcache: rearrange writeback main thread ratelimit
authorMichael Lyle <mlyle@lyle.org>
Fri, 13 Oct 2017 23:35:39 +0000 (16:35 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 16 Oct 2017 15:07:26 +0000 (09:07 -0600)
The time spent searching for things to write back "counts" for the
actual rate achieved, so don't flush the accumulated rate with each
chunk.

This will maintain better fidelity to user-commanded rates, but it
may slightly increase the burstiness of writeback.  The writeback
lock needs improvement to help mitigate this.

Signed-off-by: Michael Lyle <mlyle@lyle.org>
Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/writeback.c

index 897d28050656b5d9b7dae571f400fe354572535c..9b770b13bdf62058f372cb799575c0f9b399d065 100644 (file)
@@ -440,6 +440,8 @@ static int bch_writeback_thread(void *arg)
        struct cached_dev *dc = arg;
        bool searched_full_index;
 
+       bch_ratelimit_reset(&dc->writeback_rate);
+
        while (!kthread_should_stop()) {
                down_write(&dc->writeback_lock);
                if (!atomic_read(&dc->has_dirty) ||
@@ -467,7 +469,6 @@ static int bch_writeback_thread(void *arg)
 
                up_write(&dc->writeback_lock);
 
-               bch_ratelimit_reset(&dc->writeback_rate);
                read_dirty(dc);
 
                if (searched_full_index) {
@@ -477,6 +478,8 @@ static int bch_writeback_thread(void *arg)
                               !kthread_should_stop() &&
                               !test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags))
                                delay = schedule_timeout_interruptible(delay);
+
+                       bch_ratelimit_reset(&dc->writeback_rate);
                }
        }