mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
block: add bio_start_io_acct_time() to control start_time
bio_start_io_acct_time() interface is like bio_start_io_acct() that allows start_time to be passed in. This gives drivers the ability to defer starting accounting until after IO is issued (but possibily not entirely due to bio splitting). Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Link: https://lore.kernel.org/r/20220128155841.39644-2-snitzer@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
10825410b9
commit
e45c47d1f9
@ -1061,21 +1061,33 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long __part_start_io_acct(struct block_device *part,
|
static unsigned long __part_start_io_acct(struct block_device *part,
|
||||||
unsigned int sectors, unsigned int op)
|
unsigned int sectors, unsigned int op,
|
||||||
|
unsigned long start_time)
|
||||||
{
|
{
|
||||||
const int sgrp = op_stat_group(op);
|
const int sgrp = op_stat_group(op);
|
||||||
unsigned long now = READ_ONCE(jiffies);
|
|
||||||
|
|
||||||
part_stat_lock();
|
part_stat_lock();
|
||||||
update_io_ticks(part, now, false);
|
update_io_ticks(part, start_time, false);
|
||||||
part_stat_inc(part, ios[sgrp]);
|
part_stat_inc(part, ios[sgrp]);
|
||||||
part_stat_add(part, sectors[sgrp], sectors);
|
part_stat_add(part, sectors[sgrp], sectors);
|
||||||
part_stat_local_inc(part, in_flight[op_is_write(op)]);
|
part_stat_local_inc(part, in_flight[op_is_write(op)]);
|
||||||
part_stat_unlock();
|
part_stat_unlock();
|
||||||
|
|
||||||
return now;
|
return start_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bio_start_io_acct_time - start I/O accounting for bio based drivers
|
||||||
|
* @bio: bio to start account for
|
||||||
|
* @start_time: start time that should be passed back to bio_end_io_acct().
|
||||||
|
*/
|
||||||
|
void bio_start_io_acct_time(struct bio *bio, unsigned long start_time)
|
||||||
|
{
|
||||||
|
__part_start_io_acct(bio->bi_bdev, bio_sectors(bio),
|
||||||
|
bio_op(bio), start_time);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(bio_start_io_acct_time);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bio_start_io_acct - start I/O accounting for bio based drivers
|
* bio_start_io_acct - start I/O accounting for bio based drivers
|
||||||
* @bio: bio to start account for
|
* @bio: bio to start account for
|
||||||
@ -1084,14 +1096,15 @@ static unsigned long __part_start_io_acct(struct block_device *part,
|
|||||||
*/
|
*/
|
||||||
unsigned long bio_start_io_acct(struct bio *bio)
|
unsigned long bio_start_io_acct(struct bio *bio)
|
||||||
{
|
{
|
||||||
return __part_start_io_acct(bio->bi_bdev, bio_sectors(bio), bio_op(bio));
|
return __part_start_io_acct(bio->bi_bdev, bio_sectors(bio),
|
||||||
|
bio_op(bio), jiffies);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bio_start_io_acct);
|
EXPORT_SYMBOL_GPL(bio_start_io_acct);
|
||||||
|
|
||||||
unsigned long disk_start_io_acct(struct gendisk *disk, unsigned int sectors,
|
unsigned long disk_start_io_acct(struct gendisk *disk, unsigned int sectors,
|
||||||
unsigned int op)
|
unsigned int op)
|
||||||
{
|
{
|
||||||
return __part_start_io_acct(disk->part0, sectors, op);
|
return __part_start_io_acct(disk->part0, sectors, op, jiffies);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(disk_start_io_acct);
|
EXPORT_SYMBOL(disk_start_io_acct);
|
||||||
|
|
||||||
|
@ -1258,6 +1258,7 @@ unsigned long disk_start_io_acct(struct gendisk *disk, unsigned int sectors,
|
|||||||
void disk_end_io_acct(struct gendisk *disk, unsigned int op,
|
void disk_end_io_acct(struct gendisk *disk, unsigned int op,
|
||||||
unsigned long start_time);
|
unsigned long start_time);
|
||||||
|
|
||||||
|
void bio_start_io_acct_time(struct bio *bio, unsigned long start_time);
|
||||||
unsigned long bio_start_io_acct(struct bio *bio);
|
unsigned long bio_start_io_acct(struct bio *bio);
|
||||||
void bio_end_io_acct_remapped(struct bio *bio, unsigned long start_time,
|
void bio_end_io_acct_remapped(struct bio *bio, unsigned long start_time,
|
||||||
struct block_device *orig_bdev);
|
struct block_device *orig_bdev);
|
||||||
|
Loading…
Reference in New Issue
Block a user