diff mbox series

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

Message ID 20200818070238.1323126-5-songliubraving@fb.com (mailing list archive)
State New, archived
Headers show
Series [1/4] block: expose disk_map_sector_rcu() and hd_struct_put in genhd.h | expand

Commit Message

Song Liu Aug. 18, 2020, 7:02 a.m. UTC
This enables proper statistics in /proc/diskstats for bcache partitions.

Cc: Coly Li <colyli@suse.de>
Signed-off-by: Song Liu <songliubraving@fb.com>
---
 drivers/md/bcache/request.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Comments

Coly Li Aug. 18, 2020, 10:31 a.m. UTC | #1
On 2020/8/18 15:02, Song Liu wrote:
> This enables proper statistics in /proc/diskstats for bcache partitions.
> 
> Cc: Coly Li <colyli@suse.de>
> Signed-off-by: Song Liu <songliubraving@fb.com>

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

Reviewed-by: Coly Li <colyli@suse.de>

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;
>
diff mbox series

Patch

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;