[v6,14/20] sheepdog: Switch to .bdrv_co_block_status()

Message ID 20171207203036.14993-15-eblake@redhat.com
State New
Headers show
Series
  • add byte-based block_status driver callbacks
Related show

Commit Message

Eric Blake Dec. 7, 2017, 8:30 p.m.
We are gradually moving away from sector-based interfaces, towards
byte-based.  Update the sheepdog driver accordingly.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

---
v5: no change
v4: update to interface tweak
v3: no change
v2: rebase to mapping flag
---
 block/sheepdog.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

Comments

Fam Zheng Dec. 29, 2017, 3:08 a.m. | #1
On Thu, 12/07 14:30, Eric Blake wrote:
> We are gradually moving away from sector-based interfaces, towards
> byte-based.  Update the sheepdog driver accordingly.
> 
> Signed-off-by: Eric Blake <eblake@redhat.com>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

Reviewed-by: Fam Zheng <famz@redhat.com>
Jeff Cody Jan. 2, 2018, 9:52 p.m. | #2
On Thu, Dec 07, 2017 at 02:30:30PM -0600, Eric Blake wrote:
> We are gradually moving away from sector-based interfaces, towards
> byte-based.  Update the sheepdog driver accordingly.
> 
> Signed-off-by: Eric Blake <eblake@redhat.com>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> 
> ---
> v5: no change
> v4: update to interface tweak
> v3: no change
> v2: rebase to mapping flag
> ---
>  block/sheepdog.c | 26 +++++++++++++-------------
>  1 file changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index 696a71442a..0af8b07892 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -2988,19 +2988,19 @@ static coroutine_fn int sd_co_pdiscard(BlockDriverState *bs, int64_t offset,
>      return acb.ret;
>  }
> 
> -static coroutine_fn int64_t
> -sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
> -                       int *pnum, BlockDriverState **file)
> +static coroutine_fn int
> +sd_co_block_status(BlockDriverState *bs, bool want_zero, int64_t offset,
> +                   int64_t bytes, int64_t *pnum, int64_t *map,
> +                   BlockDriverState **file)
>  {
>      BDRVSheepdogState *s = bs->opaque;
>      SheepdogInode *inode = &s->inode;
>      uint32_t object_size = (UINT32_C(1) << inode->block_size_shift);
> -    uint64_t offset = sector_num * BDRV_SECTOR_SIZE;
>      unsigned long start = offset / object_size,
> -                  end = DIV_ROUND_UP((sector_num + nb_sectors) *
> -                                     BDRV_SECTOR_SIZE, object_size);
> +                  end = DIV_ROUND_UP(offset + bytes, object_size);
>      unsigned long idx;
> -    int64_t ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | offset;
> +    *map = offset;
> +    int ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
> 
>      for (idx = start; idx < end; idx++) {
>          if (inode->data_vdi_id[idx] == 0) {
> @@ -3017,9 +3017,9 @@ sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
>          }
>      }
> 
> -    *pnum = (idx - start) * object_size / BDRV_SECTOR_SIZE;
> -    if (*pnum > nb_sectors) {
> -        *pnum = nb_sectors;
> +    *pnum = (idx - start) * object_size;
> +    if (*pnum > bytes) {
> +        *pnum = bytes;
>      }
>      if (ret > 0 && ret & BDRV_BLOCK_OFFSET_VALID) {
>          *file = bs;
> @@ -3097,7 +3097,7 @@ static BlockDriver bdrv_sheepdog = {
>      .bdrv_co_writev = sd_co_writev,
>      .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
>      .bdrv_co_pdiscard = sd_co_pdiscard,
> -    .bdrv_co_get_block_status = sd_co_get_block_status,
> +    .bdrv_co_block_status   = sd_co_block_status,
> 
>      .bdrv_snapshot_create   = sd_snapshot_create,
>      .bdrv_snapshot_goto     = sd_snapshot_goto,
> @@ -3133,7 +3133,7 @@ static BlockDriver bdrv_sheepdog_tcp = {
>      .bdrv_co_writev = sd_co_writev,
>      .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
>      .bdrv_co_pdiscard = sd_co_pdiscard,
> -    .bdrv_co_get_block_status = sd_co_get_block_status,
> +    .bdrv_co_block_status   = sd_co_block_status,
> 
>      .bdrv_snapshot_create   = sd_snapshot_create,
>      .bdrv_snapshot_goto     = sd_snapshot_goto,
> @@ -3169,7 +3169,7 @@ static BlockDriver bdrv_sheepdog_unix = {
>      .bdrv_co_writev = sd_co_writev,
>      .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
>      .bdrv_co_pdiscard = sd_co_pdiscard,
> -    .bdrv_co_get_block_status = sd_co_get_block_status,
> +    .bdrv_co_block_status   = sd_co_block_status,
> 
>      .bdrv_snapshot_create   = sd_snapshot_create,
>      .bdrv_snapshot_goto     = sd_snapshot_goto,
> -- 
> 2.14.3
> 
> 

Minor conflicts here with head, but straightforward to fix.

Reviewed-by: Jeff Cody <jcody@redhat.com>

Patch

diff --git a/block/sheepdog.c b/block/sheepdog.c
index 696a71442a..0af8b07892 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -2988,19 +2988,19 @@  static coroutine_fn int sd_co_pdiscard(BlockDriverState *bs, int64_t offset,
     return acb.ret;
 }

-static coroutine_fn int64_t
-sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
-                       int *pnum, BlockDriverState **file)
+static coroutine_fn int
+sd_co_block_status(BlockDriverState *bs, bool want_zero, int64_t offset,
+                   int64_t bytes, int64_t *pnum, int64_t *map,
+                   BlockDriverState **file)
 {
     BDRVSheepdogState *s = bs->opaque;
     SheepdogInode *inode = &s->inode;
     uint32_t object_size = (UINT32_C(1) << inode->block_size_shift);
-    uint64_t offset = sector_num * BDRV_SECTOR_SIZE;
     unsigned long start = offset / object_size,
-                  end = DIV_ROUND_UP((sector_num + nb_sectors) *
-                                     BDRV_SECTOR_SIZE, object_size);
+                  end = DIV_ROUND_UP(offset + bytes, object_size);
     unsigned long idx;
-    int64_t ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | offset;
+    *map = offset;
+    int ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;

     for (idx = start; idx < end; idx++) {
         if (inode->data_vdi_id[idx] == 0) {
@@ -3017,9 +3017,9 @@  sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
         }
     }

-    *pnum = (idx - start) * object_size / BDRV_SECTOR_SIZE;
-    if (*pnum > nb_sectors) {
-        *pnum = nb_sectors;
+    *pnum = (idx - start) * object_size;
+    if (*pnum > bytes) {
+        *pnum = bytes;
     }
     if (ret > 0 && ret & BDRV_BLOCK_OFFSET_VALID) {
         *file = bs;
@@ -3097,7 +3097,7 @@  static BlockDriver bdrv_sheepdog = {
     .bdrv_co_writev = sd_co_writev,
     .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
     .bdrv_co_pdiscard = sd_co_pdiscard,
-    .bdrv_co_get_block_status = sd_co_get_block_status,
+    .bdrv_co_block_status   = sd_co_block_status,

     .bdrv_snapshot_create   = sd_snapshot_create,
     .bdrv_snapshot_goto     = sd_snapshot_goto,
@@ -3133,7 +3133,7 @@  static BlockDriver bdrv_sheepdog_tcp = {
     .bdrv_co_writev = sd_co_writev,
     .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
     .bdrv_co_pdiscard = sd_co_pdiscard,
-    .bdrv_co_get_block_status = sd_co_get_block_status,
+    .bdrv_co_block_status   = sd_co_block_status,

     .bdrv_snapshot_create   = sd_snapshot_create,
     .bdrv_snapshot_goto     = sd_snapshot_goto,
@@ -3169,7 +3169,7 @@  static BlockDriver bdrv_sheepdog_unix = {
     .bdrv_co_writev = sd_co_writev,
     .bdrv_co_flush_to_disk  = sd_co_flush_to_disk,
     .bdrv_co_pdiscard = sd_co_pdiscard,
-    .bdrv_co_get_block_status = sd_co_get_block_status,
+    .bdrv_co_block_status   = sd_co_block_status,

     .bdrv_snapshot_create   = sd_snapshot_create,
     .bdrv_snapshot_goto     = sd_snapshot_goto,