Re: [PATCH 4/4] bcache: use part_[begin|end]_io_acct instead of disk_[begin|end]_io_acct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020/8/18 15:02, Song Liu wrote:
> This enables proper statistics in /proc/diskstats for bcache partitions.
> 
> Cc: Coly Li <colyli@xxxxxxx>
> Signed-off-by: Song Liu <songliubraving@xxxxxx>

The code looks good to me. It is fine to submit this bcache patch in
your submission path.

Reviewed-by: Coly Li <colyli@xxxxxxx>

Thanks.

Coly Li

> ---
>  drivers/md/bcache/request.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
> index 7de82c67597ce..1d946f601f7eb 100644
> --- a/drivers/md/bcache/request.c
> +++ b/drivers/md/bcache/request.c
> @@ -475,6 +475,7 @@ struct search {
>  	unsigned int		read_dirty_data:1;
>  	unsigned int		cache_missed:1;
>  
> +	struct hd_struct	*part;
>  	unsigned long		start_time;
>  
>  	struct btree_op		op;
> @@ -669,7 +670,8 @@ static void bio_complete(struct search *s)
>  {
>  	if (s->orig_bio) {
>  		/* Count on bcache device */
> -		disk_end_io_acct(s->d->disk, bio_op(s->orig_bio), s->start_time);
> +		part_end_io_acct(s->part, bio_op(s->orig_bio), s->start_time);
> +		hd_struct_put(s->part);
>  
>  		trace_bcache_request_end(s->d, s->orig_bio);
>  		s->orig_bio->bi_status = s->iop.status;
> @@ -731,7 +733,8 @@ static inline struct search *search_alloc(struct bio *bio,
>  	s->write		= op_is_write(bio_op(bio));
>  	s->read_dirty_data	= 0;
>  	/* Count on the bcache device */
> -	s->start_time		= disk_start_io_acct(d->disk, bio_sectors(bio), bio_op(bio));
> +	s->part			= disk_map_sector_rcu(d->disk, bio->bi_iter.bi_sector);
> +	s->start_time		= part_start_io_acct(s->part, bio_sectors(bio), bio_op(bio));
>  	s->iop.c		= d->c;
>  	s->iop.bio		= NULL;
>  	s->iop.inode		= d->id;
> @@ -1072,6 +1075,7 @@ struct detached_dev_io_private {
>  	unsigned long		start_time;
>  	bio_end_io_t		*bi_end_io;
>  	void			*bi_private;
> +	struct hd_struct	*part;
>  };
>  
>  static void detached_dev_end_io(struct bio *bio)
> @@ -1083,7 +1087,8 @@ static void detached_dev_end_io(struct bio *bio)
>  	bio->bi_private = ddip->bi_private;
>  
>  	/* Count on the bcache device */
> -	disk_end_io_acct(ddip->d->disk, bio_op(bio), ddip->start_time);
> +	part_end_io_acct(ddip->part, bio_op(bio), ddip->start_time);
> +	hd_struct_put(ddip->part);
>  
>  	if (bio->bi_status) {
>  		struct cached_dev *dc = container_of(ddip->d,
> @@ -1109,7 +1114,8 @@ static void detached_dev_do_request(struct bcache_device *d, struct bio *bio)
>  	ddip = kzalloc(sizeof(struct detached_dev_io_private), GFP_NOIO);
>  	ddip->d = d;
>  	/* Count on the bcache device */
> -	ddip->start_time = disk_start_io_acct(d->disk, bio_sectors(bio), bio_op(bio));
> +	ddip->part = disk_map_sector_rcu(d->disk, bio->bi_iter.bi_sector);
> +	ddip->start_time = part_start_io_acct(ddip->part, bio_sectors(bio), bio_op(bio));
>  	ddip->bi_end_io = bio->bi_end_io;
>  	ddip->bi_private = bio->bi_private;
>  	bio->bi_end_io = detached_dev_end_io;
> 




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux