Message ID | 20230407153303.391121-7-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | block: remove bdrv_co_get_geometry coroutines from I/O hot path | expand |
On Fri, Apr 07, 2023 at 05:33:01PM +0200, Paolo Bonzini wrote: > bdrv_co_get_geometry is only used in blk_co_get_geometry. Inline it in > there, to reduce the number of wrappers for bs->total_sectors. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > block.c | 10 ---------- > block/block-backend.c | 8 ++++++-- > include/block/block-io.h | 3 --- > 3 files changed, 6 insertions(+), 15 deletions(-) Reviewed-by: Eric Blake <eblake@redhat.com> > > diff --git a/block.c b/block.c > index 9de50ac7c811..dbbc8de30c24 100644 > --- a/block.c > +++ b/block.c > @@ -5879,16 +5879,6 @@ int64_t coroutine_fn bdrv_co_getlength(BlockDriverState *bs) > return ret * BDRV_SECTOR_SIZE; > } > > -/* return 0 as number of sectors if no device present or error */ > -void coroutine_fn bdrv_co_get_geometry(BlockDriverState *bs, > - uint64_t *nb_sectors_ptr) > -{ > - int64_t nb_sectors = bdrv_co_nb_sectors(bs); > - IO_CODE(); Pre-patch, we called bdrv_co_nb_sectors() before the IO_CODE guard... > +/* return 0 as number of sectors if no device present or error */ > void coroutine_fn blk_co_get_geometry(BlockBackend *blk, > uint64_t *nb_sectors_ptr) > { > + BlockDriverState *bs = blk_bs(blk); > + > IO_CODE(); > GRAPH_RDLOCK_GUARD(); > > - if (!blk_bs(blk)) { > + if (!bs) { > *nb_sectors_ptr = 0; > } else { > - bdrv_co_get_geometry(blk_bs(blk), nb_sectors_ptr); > + int64_t nb_sectors = bdrv_co_nb_sectors(bs); ...post-patch the order swaps. That actually feels better to me, (the guard is supposed to do sanity checks to detect coding bugs at the soonest possible moment; if we have a bug, doing the work and only later failing the check is not as safe as failing fast) - but probably no impact to correctly written code.
diff --git a/block.c b/block.c index 9de50ac7c811..dbbc8de30c24 100644 --- a/block.c +++ b/block.c @@ -5879,16 +5879,6 @@ int64_t coroutine_fn bdrv_co_getlength(BlockDriverState *bs) return ret * BDRV_SECTOR_SIZE; } -/* return 0 as number of sectors if no device present or error */ -void coroutine_fn bdrv_co_get_geometry(BlockDriverState *bs, - uint64_t *nb_sectors_ptr) -{ - int64_t nb_sectors = bdrv_co_nb_sectors(bs); - IO_CODE(); - - *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors; -} - bool bdrv_is_sg(BlockDriverState *bs) { IO_CODE(); diff --git a/block/block-backend.c b/block/block-backend.c index 7d331d93ebbc..f159cc51d264 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1627,16 +1627,20 @@ int64_t coroutine_fn blk_co_getlength(BlockBackend *blk) return bdrv_co_getlength(blk_bs(blk)); } +/* return 0 as number of sectors if no device present or error */ void coroutine_fn blk_co_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr) { + BlockDriverState *bs = blk_bs(blk); + IO_CODE(); GRAPH_RDLOCK_GUARD(); - if (!blk_bs(blk)) { + if (!bs) { *nb_sectors_ptr = 0; } else { - bdrv_co_get_geometry(blk_bs(blk), nb_sectors_ptr); + int64_t nb_sectors = bdrv_co_nb_sectors(bs); + *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors; } } diff --git a/include/block/block-io.h b/include/block/block-io.h index dbc034b7288e..9e2248a295a6 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -90,9 +90,6 @@ int64_t co_wrapper bdrv_get_allocated_file_size(BlockDriverState *bs); BlockMeasureInfo *bdrv_measure(BlockDriver *drv, QemuOpts *opts, BlockDriverState *in_bs, Error **errp); -void coroutine_fn GRAPH_RDLOCK -bdrv_co_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); - int coroutine_fn GRAPH_RDLOCK bdrv_co_delete_file(BlockDriverState *bs, Error **errp);
bdrv_co_get_geometry is only used in blk_co_get_geometry. Inline it in there, to reduce the number of wrappers for bs->total_sectors. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- block.c | 10 ---------- block/block-backend.c | 8 ++++++-- include/block/block-io.h | 3 --- 3 files changed, 6 insertions(+), 15 deletions(-)