Commit 59767fbd authored by Michael Callahan's avatar Michael Callahan Committed by Jens Axboe
Browse files

block: Add part_stat_read_accum to read across field entries.



Add a part_stat_read_accum macro to genhd.h to read and sum across
field entries.  For example to sum up the number read and write
sectors completed.  In addition to being ar reasonable cleanup by
itself this will make it easier to add new stat fields in the future.

tj: Refreshed on top of v4.17.

Signed-off-by: default avatarMichael Callahan <michaelcallahan@fb.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3f289dcb
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -2674,8 +2674,7 @@ bool drbd_rs_c_min_rate_throttle(struct drbd_device *device)
	if (c_min_rate == 0)
		return false;

	curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
		      (int)part_stat_read(&disk->part0, sectors[1]) -
	curr_events = (int)part_stat_read_accum(&disk->part0, sectors) -
			atomic_read(&device->rs_sect_ev);

	if (atomic_read(&device->ap_actlog_cnt)
+1 −3
Original line number Diff line number Diff line
@@ -1690,9 +1690,7 @@ void drbd_rs_controller_reset(struct drbd_device *device)
	atomic_set(&device->rs_sect_in, 0);
	atomic_set(&device->rs_sect_ev, 0);
	device->rs_in_flight = 0;
	device->rs_last_events =
		(int)part_stat_read(&disk->part0, sectors[0]) +
		(int)part_stat_read(&disk->part0, sectors[1]);
	device->rs_last_events = (int)part_stat_read_accum(&disk->part0, sectors);

	/* Updating the RCU protected object in place is necessary since
	   this function gets called from atomic context.
+1 −2
Original line number Diff line number Diff line
@@ -8046,8 +8046,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
	rcu_read_lock();
	rdev_for_each_rcu(rdev, mddev) {
		struct gendisk *disk = rdev->bdev->bd_contains->bd_disk;
		curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
			      (int)part_stat_read(&disk->part0, sectors[1]) -
		curr_events = (int)part_stat_read_accum(&disk->part0, sectors) -
			      atomic_read(&disk->sync_io);
		/* sync IO will cause sync_io to increase before the disk_stats
		 * as sync_io is counted when a request starts, and
+4 −0
Original line number Diff line number Diff line
@@ -353,6 +353,10 @@ static inline void free_part_stats(struct hd_struct *part)

#endif /* CONFIG_SMP */

#define part_stat_read_accum(part, field)				\
	(part_stat_read(part, field[0]) +				\
	 part_stat_read(part, field[1]))

#define part_stat_add(cpu, part, field, addnd)	do {			\
	__part_stat_add((cpu), (part), field, addnd);			\
	if ((part)->partno)						\