Re: [PATCH v2 3/3] dm: properly fix redundant bio-based IO accounting

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

 



On Thu, Jan 27 2022 at  5:56P -0500,
Mike Snitzer <snitzer@xxxxxxxxxx> wrote:

> Record the start_time for a bio but defer the starting block core's IO
> accounting until after IO is submitted using bio_start_io_acct_time().
> 
> This approach avoids the need to mess around with any of the
> individual IO stats in response to a bio_split() that follows bio
> submission.
> 
> Reported-by: Bud Brown <bubrown@xxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Depends-on: f9893e1da2e3 ("block: add bio_start_io_acct_time() to control start_time")
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  drivers/md/dm.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> index 9849114b3c08..144436301a57 100644
> --- a/drivers/md/dm.c
> +++ b/drivers/md/dm.c
> @@ -489,7 +489,7 @@ static void start_io_acct(struct dm_io *io)
>  	struct mapped_device *md = io->md;
>  	struct bio *bio = io->orig_bio;
>  
> -	io->start_time = bio_start_io_acct(bio);
> +	__bio_start_io_acct(bio, io->start_time);
>  	if (unlikely(dm_stats_used(&md->stats)))
>  		dm_stats_account_io(&md->stats, bio_data_dir(bio),
>  				    bio->bi_iter.bi_sector, bio_sectors(bio),

This should be calling bio_start_io_acct_time().
I updated the header but somehow dropped the code change before
sending.

Mike

> @@ -535,7 +535,7 @@ static struct dm_io *alloc_io(struct mapped_device *md, struct bio *bio)
>  	io->md = md;
>  	spin_lock_init(&io->endio_lock);
>  
> -	start_io_acct(io);
> +	io->start_time = READ_ONCE(jiffies);
>  
>  	return io;
>  }
> @@ -1482,6 +1482,7 @@ static void __split_and_process_bio(struct mapped_device *md,
>  			submit_bio_noacct(bio);
>  		}
>  	}
> +	start_io_acct(ci.io);
>  
>  	/* drop the extra reference count */
>  	dm_io_dec_pending(ci.io, errno_to_blk_status(error));
> -- 
> 2.15.0
> 




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux