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

Commit 0609e0ef authored by Jens Axboe's avatar Jens Axboe
Browse files

block: make part_in_flight() take an array of two ints



Instead of returning the count that matches the partition, pass
in an array of two ints. Index 0 will be filled with the inflight
count for the partition in question, and index 1 will filled
with the root inflight count, if the partition passed in is not the
root.

This is in preparation for being able to calculate both in one
go.

Reviewed-by: default avatarBart Van Assche <bart.vanassche@wdc.com>
Reviewed-by: default avatarOmar Sandoval <osandov@fb.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent d62e26b3
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1472,15 +1472,15 @@ static void add_acct_request(struct request_queue *q, struct request *rq,
static void part_round_stats_single(struct request_queue *q, int cpu,
				    struct hd_struct *part, unsigned long now)
{
	int inflight;
	int inflight[2];

	if (now == part->stamp)
		return;

	inflight = part_in_flight(q, part);
	if (inflight) {
	part_in_flight(q, part, inflight);
	if (inflight[0]) {
		__part_stat_add(cpu, part, time_in_queue,
				inflight * (now - part->stamp));
				inflight[0] * (now - part->stamp));
		__part_stat_add(cpu, part, io_ticks, (now - part->stamp));
	}
	part->stamp = now;
+3 −1
Original line number Diff line number Diff line
@@ -1204,6 +1204,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
	struct disk_part_iter piter;
	struct hd_struct *hd;
	char buf[BDEVNAME_SIZE];
	unsigned int inflight[2];
	int cpu;

	/*
@@ -1219,6 +1220,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
		cpu = part_stat_lock();
		part_round_stats(gp->queue, cpu, hd);
		part_stat_unlock();
		part_in_flight(gp->queue, hd, inflight);
		seq_printf(seqf, "%4d %7d %s %lu %lu %lu "
			   "%u %lu %lu %lu %u %u %u %u\n",
			   MAJOR(part_devt(hd)), MINOR(part_devt(hd)),
@@ -1231,7 +1233,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
			   part_stat_read(hd, merges[WRITE]),
			   part_stat_read(hd, sectors[WRITE]),
			   jiffies_to_msecs(part_stat_read(hd, ticks[WRITE])),
			   part_in_flight(gp->queue, hd),
			   inflight[0],
			   jiffies_to_msecs(part_stat_read(hd, io_ticks)),
			   jiffies_to_msecs(part_stat_read(hd, time_in_queue))
			);
+3 −1
Original line number Diff line number Diff line
@@ -113,11 +113,13 @@ ssize_t part_stat_show(struct device *dev,
{
	struct hd_struct *p = dev_to_part(dev);
	struct request_queue *q = dev_to_disk(dev)->queue;
	unsigned int inflight[2];
	int cpu;

	cpu = part_stat_lock();
	part_round_stats(q, cpu, p);
	part_stat_unlock();
	part_in_flight(q, p, inflight);
	return sprintf(buf,
		"%8lu %8lu %8llu %8u "
		"%8lu %8lu %8llu %8u "
@@ -131,7 +133,7 @@ ssize_t part_stat_show(struct device *dev,
		part_stat_read(p, merges[WRITE]),
		(unsigned long long)part_stat_read(p, sectors[WRITE]),
		jiffies_to_msecs(part_stat_read(p, ticks[WRITE])),
		part_in_flight(q, p),
		inflight[0],
		jiffies_to_msecs(part_stat_read(p, io_ticks)),
		jiffies_to_msecs(part_stat_read(p, time_in_queue)));
}
+10 −3
Original line number Diff line number Diff line
@@ -378,11 +378,18 @@ static inline void part_dec_in_flight(struct request_queue *q,
		atomic_dec(&part_to_disk(part)->part0.in_flight[rw]);
}

static inline int part_in_flight(struct request_queue *q,
				 struct hd_struct *part)
static inline void part_in_flight(struct request_queue *q,
				  struct hd_struct *part,
				  unsigned int inflight[2])
{
	return atomic_read(&part->in_flight[0]) +
	inflight[0] = atomic_read(&part->in_flight[0]) +
			atomic_read(&part->in_flight[1]);
	if (part->partno) {
		part = &part_to_disk(part)->part0;
		inflight[1] = atomic_read(&part->in_flight[0]) +
				atomic_read(&part->in_flight[1]);
	} else
		inflight[1] = 0;
}

static inline struct partition_meta_info *alloc_part_info(struct gendisk *disk)