qemu-block
[Top][All Lists]
Advanced

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

Re: [Qemu-block] [PATCH 1/2] nbd: Convert to byte-based interface


From: Paolo Bonzini
Subject: Re: [Qemu-block] [PATCH 1/2] nbd: Convert to byte-based interface
Date: Mon, 27 Jun 2016 14:19:25 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1


On 24/06/2016 05:58, Eric Blake wrote:
> The NBD protocol doesn't have any notion of sectors, so it is
> a fairly easy convertion to use byte-based read and write.
> 
> Signed-off-by: Eric Blake <address@hidden>
> ---
>  block/nbd-client.h  |  8 ++++----
>  include/block/nbd.h |  1 -
>  block/nbd-client.c  | 30 +++++++++++++++++-------------
>  block/nbd.c         | 12 ++++++------
>  4 files changed, 27 insertions(+), 24 deletions(-)
> 
> diff --git a/block/nbd-client.h b/block/nbd-client.h
> index 62dec33..fa9817b 100644
> --- a/block/nbd-client.h
> +++ b/block/nbd-client.h
> @@ -46,10 +46,10 @@ void nbd_client_close(BlockDriverState *bs);
> 
>  int nbd_client_co_pdiscard(BlockDriverState *bs, int64_t offset, int count);
>  int nbd_client_co_flush(BlockDriverState *bs);
> -int nbd_client_co_writev(BlockDriverState *bs, int64_t sector_num,
> -                         int nb_sectors, QEMUIOVector *qiov, int flags);
> -int nbd_client_co_readv(BlockDriverState *bs, int64_t sector_num,
> -                        int nb_sectors, QEMUIOVector *qiov);
> +int nbd_client_co_pwritev(BlockDriverState *bs, uint64_t offset,
> +                          uint64_t bytes, QEMUIOVector *qiov, int flags);
> +int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset,
> +                         uint64_t bytes, QEMUIOVector *qiov, int flags);
> 
>  void nbd_client_detach_aio_context(BlockDriverState *bs);
>  void nbd_client_attach_aio_context(BlockDriverState *bs,
> diff --git a/include/block/nbd.h b/include/block/nbd.h
> index 503f514..cb91820 100644
> --- a/include/block/nbd.h
> +++ b/include/block/nbd.h
> @@ -77,7 +77,6 @@ enum {
> 
>  /* Maximum size of a single READ/WRITE data buffer */
>  #define NBD_MAX_BUFFER_SIZE (32 * 1024 * 1024)
> -#define NBD_MAX_SECTORS (NBD_MAX_BUFFER_SIZE / BDRV_SECTOR_SIZE)
> 
>  /* Maximum size of an export name. The NBD spec requires 256 and
>   * suggests that servers support up to 4096, but we stick to only the
> diff --git a/block/nbd-client.c b/block/nbd-client.c
> index 070bb9d..647dedd 100644
> --- a/block/nbd-client.c
> +++ b/block/nbd-client.c
> @@ -218,17 +218,20 @@ static void nbd_coroutine_end(NbdClientSession *s,
>      }
>  }
> 
> -int nbd_client_co_readv(BlockDriverState *bs, int64_t sector_num,
> -                        int nb_sectors, QEMUIOVector *qiov)
> +int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset,
> +                         uint64_t bytes, QEMUIOVector *qiov, int flags)
>  {
>      NbdClientSession *client = nbd_get_client_session(bs);
> -    struct nbd_request request = { .type = NBD_CMD_READ };
> +    struct nbd_request request = {
> +        .type = NBD_CMD_READ,
> +        .from = offset,
> +        .len = bytes,
> +    };
>      struct nbd_reply reply;
>      ssize_t ret;
> 
> -    assert(nb_sectors <= NBD_MAX_SECTORS);
> -    request.from = sector_num * 512;
> -    request.len = nb_sectors * 512;
> +    assert(bytes <= NBD_MAX_BUFFER_SIZE);
> +    assert(!flags);
> 
>      nbd_coroutine_start(client, &request);
>      ret = nbd_co_send_request(bs, &request, NULL);
> @@ -239,14 +242,17 @@ int nbd_client_co_readv(BlockDriverState *bs, int64_t 
> sector_num,
>      }
>      nbd_coroutine_end(client, &request);
>      return -reply.error;
> -
>  }
> 
> -int nbd_client_co_writev(BlockDriverState *bs, int64_t sector_num,
> -                         int nb_sectors, QEMUIOVector *qiov, int flags)
> +int nbd_client_co_pwritev(BlockDriverState *bs, uint64_t offset,
> +                          uint64_t bytes, QEMUIOVector *qiov, int flags)
>  {
>      NbdClientSession *client = nbd_get_client_session(bs);
> -    struct nbd_request request = { .type = NBD_CMD_WRITE };
> +    struct nbd_request request = {
> +        .type = NBD_CMD_WRITE,
> +        .from = offset,
> +        .len = bytes,
> +    };
>      struct nbd_reply reply;
>      ssize_t ret;
> 
> @@ -255,9 +261,7 @@ int nbd_client_co_writev(BlockDriverState *bs, int64_t 
> sector_num,
>          request.type |= NBD_CMD_FLAG_FUA;
>      }
> 
> -    assert(nb_sectors <= NBD_MAX_SECTORS);
> -    request.from = sector_num * 512;
> -    request.len = nb_sectors * 512;
> +    assert(bytes <= NBD_MAX_BUFFER_SIZE);
> 
>      nbd_coroutine_start(client, &request);
>      ret = nbd_co_send_request(bs, &request, qiov);
> diff --git a/block/nbd.c b/block/nbd.c
> index 42cae0e..8d57220 100644
> --- a/block/nbd.c
> +++ b/block/nbd.c
> @@ -438,8 +438,8 @@ static BlockDriver bdrv_nbd = {
>      .instance_size              = sizeof(BDRVNBDState),
>      .bdrv_parse_filename        = nbd_parse_filename,
>      .bdrv_file_open             = nbd_open,
> -    .bdrv_co_readv              = nbd_client_co_readv,
> -    .bdrv_co_writev_flags       = nbd_client_co_writev,
> +    .bdrv_co_preadv             = nbd_client_co_preadv,
> +    .bdrv_co_pwritev            = nbd_client_co_pwritev,
>      .bdrv_close                 = nbd_close,
>      .bdrv_co_flush_to_os        = nbd_co_flush,
>      .bdrv_co_pdiscard           = nbd_client_co_pdiscard,
> @@ -456,8 +456,8 @@ static BlockDriver bdrv_nbd_tcp = {
>      .instance_size              = sizeof(BDRVNBDState),
>      .bdrv_parse_filename        = nbd_parse_filename,
>      .bdrv_file_open             = nbd_open,
> -    .bdrv_co_readv              = nbd_client_co_readv,
> -    .bdrv_co_writev_flags       = nbd_client_co_writev,
> +    .bdrv_co_preadv             = nbd_client_co_preadv,
> +    .bdrv_co_pwritev            = nbd_client_co_pwritev,
>      .bdrv_close                 = nbd_close,
>      .bdrv_co_flush_to_os        = nbd_co_flush,
>      .bdrv_co_pdiscard           = nbd_client_co_pdiscard,
> @@ -474,8 +474,8 @@ static BlockDriver bdrv_nbd_unix = {
>      .instance_size              = sizeof(BDRVNBDState),
>      .bdrv_parse_filename        = nbd_parse_filename,
>      .bdrv_file_open             = nbd_open,
> -    .bdrv_co_readv              = nbd_client_co_readv,
> -    .bdrv_co_writev_flags       = nbd_client_co_writev,
> +    .bdrv_co_preadv             = nbd_client_co_preadv,
> +    .bdrv_co_pwritev            = nbd_client_co_pwritev,
>      .bdrv_close                 = nbd_close,
>      .bdrv_co_flush_to_os        = nbd_co_flush,
>      .bdrv_co_pdiscard           = nbd_client_co_pdiscard,
> 

Acked-by: Paolo Bonzini <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]