Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4cb6efc authored by Coly Li's avatar Coly Li Committed by Jens Axboe
Browse files

bcache: display rate debug parameters to 0 when writeback is not running



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: default avatarColy Li <colyli@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 78ac2107
Loading
Loading
Loading
Loading
+16 −10
Original line number Original line Diff line number Diff line
@@ -149,6 +149,7 @@ SHOW(__bch_cached_dev)
	struct cached_dev *dc = container_of(kobj, struct cached_dev,
	struct cached_dev *dc = container_of(kobj, struct cached_dev,
					     disk.kobj);
					     disk.kobj);
	const char *states[] = { "no cache", "clean", "dirty", "inconsistent" };
	const char *states[] = { "no cache", "clean", "dirty", "inconsistent" };
	int wb = dc->writeback_running;


#define var(stat)		(dc->stat)
#define var(stat)		(dc->stat)


@@ -170,7 +171,7 @@ SHOW(__bch_cached_dev)
	var_printf(writeback_running,	"%i");
	var_printf(writeback_running,	"%i");
	var_print(writeback_delay);
	var_print(writeback_delay);
	var_print(writeback_percent);
	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_hprint(io_errors,		atomic_read(&dc->io_errors));
	sysfs_printf(io_error_limit,	"%i", dc->error_limit);
	sysfs_printf(io_error_limit,	"%i", dc->error_limit);
	sysfs_printf(io_disable,	"%i", dc->io_disable);
	sysfs_printf(io_disable,	"%i", dc->io_disable);
@@ -188,15 +189,20 @@ SHOW(__bch_cached_dev)
		char change[20];
		char change[20];
		s64 next_io;
		s64 next_io;


		bch_hprint(rate,	dc->writeback_rate.rate << 9);
		/*
		 * 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(dirty, bcache_dev_sectors_dirty(&dc->disk) << 9);
		bch_hprint(target, dc->writeback_rate_target << 9);
		bch_hprint(target, dc->writeback_rate_target << 9);
		bch_hprint(proportional,dc->writeback_rate_proportional << 9);
		bch_hprint(proportional,
		bch_hprint(integral,	dc->writeback_rate_integral_scaled << 9);
			   wb ? dc->writeback_rate_proportional << 9 : 0);
		bch_hprint(change,	dc->writeback_rate_change << 9);
		bch_hprint(integral,

			   wb ? dc->writeback_rate_integral_scaled << 9 : 0);
		next_io = div64_s64(dc->writeback_rate.next - local_clock(),
		bch_hprint(change, wb ? dc->writeback_rate_change << 9 : 0);
				    NSEC_PER_MSEC);
		next_io = wb ? div64_s64(dc->writeback_rate.next-local_clock(),
					 NSEC_PER_MSEC) : 0;


		return sprintf(buf,
		return sprintf(buf,
			       "rate:\t\t%s/sec\n"
			       "rate:\t\t%s/sec\n"