bcache: display rate debug parameters to 0 when writeback is not running
authorColy Li <colyli@suse.de>
Thu, 9 Aug 2018 07:48:43 +0000 (15:48 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 9 Aug 2018 14:21:03 +0000 (08:21 -0600)
When writeback is not running, writeback rate should be 0, other value is
misleading. And the following dyanmic writeback rate debug parameters
should be 0 too,
rate, proportional, integral, change
otherwise they are misleading when writeback is not running.

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

index 225b15a..3e9d345 100644 (file)
@@ -149,6 +149,7 @@ SHOW(__bch_cached_dev)
        struct cached_dev *dc = container_of(kobj, struct cached_dev,
                                             disk.kobj);
        const char *states[] = { "no cache", "clean", "dirty", "inconsistent" };
+       int wb = dc->writeback_running;
 
 #define var(stat)              (dc->stat)
 
@@ -170,7 +171,7 @@ SHOW(__bch_cached_dev)
        var_printf(writeback_running,   "%i");
        var_print(writeback_delay);
        var_print(writeback_percent);
-       sysfs_hprint(writeback_rate,    dc->writeback_rate.rate << 9);
+       sysfs_hprint(writeback_rate,    wb ? dc->writeback_rate.rate << 9 : 0);
        sysfs_hprint(io_errors,         atomic_read(&dc->io_errors));
        sysfs_printf(io_error_limit,    "%i", dc->error_limit);
        sysfs_printf(io_disable,        "%i", dc->io_disable);
@@ -188,15 +189,20 @@ SHOW(__bch_cached_dev)
                char change[20];
                s64 next_io;
 
-               bch_hprint(rate,        dc->writeback_rate.rate << 9);
-               bch_hprint(dirty,       bcache_dev_sectors_dirty(&dc->disk) << 9);
-               bch_hprint(target,      dc->writeback_rate_target << 9);
-               bch_hprint(proportional,dc->writeback_rate_proportional << 9);
-               bch_hprint(integral,    dc->writeback_rate_integral_scaled << 9);
-               bch_hprint(change,      dc->writeback_rate_change << 9);
-
-               next_io = div64_s64(dc->writeback_rate.next - local_clock(),
-                                   NSEC_PER_MSEC);
+               /*
+                * Except for dirty and target, other values should
+                * be 0 if writeback is not running.
+                */
+               bch_hprint(rate, wb ? dc->writeback_rate.rate << 9 : 0);
+               bch_hprint(dirty, bcache_dev_sectors_dirty(&dc->disk) << 9);
+               bch_hprint(target, dc->writeback_rate_target << 9);
+               bch_hprint(proportional,
+                          wb ? dc->writeback_rate_proportional << 9 : 0);
+               bch_hprint(integral,
+                          wb ? dc->writeback_rate_integral_scaled << 9 : 0);
+               bch_hprint(change, wb ? dc->writeback_rate_change << 9 : 0);
+               next_io = wb ? div64_s64(dc->writeback_rate.next-local_clock(),
+                                        NSEC_PER_MSEC) : 0;
 
                return sprintf(buf,
                               "rate:\t\t%s/sec\n"