diff mbox series

[6/8] block-backend: inline bdrv_co_get_geometry

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

Commit Message

Paolo Bonzini April 7, 2023, 3:33 p.m. UTC
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(-)

Comments

Eric Blake April 7, 2023, 7:58 p.m. UTC | #1
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 mbox series

Patch

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);