[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 24/25] nbd: Convert to byte-based interface
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL v2 24/25] nbd: Convert to byte-based interface |
Date: |
Wed, 20 Jul 2016 17:21:21 +0100 |
From: Eric Blake <address@hidden>
The NBD protocol doesn't have any notion of sectors, so it is
a fairly easy conversion to use byte-based read and write.
Signed-off-by: Eric Blake <address@hidden>
Acked-by: Paolo Bonzini <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/nbd-client.c | 30 +++++++++++++++++-------------
block/nbd-client.h | 8 ++++----
block/nbd.c | 12 ++++++------
include/block/nbd.h | 1 -
4 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/block/nbd-client.c b/block/nbd-client.c
index d22feea..2cf3237 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-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/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,
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
--
2.7.4
- [Qemu-devel] [PULL v2 14/25] block: Convert .bdrv_aio_discard() to byte-based, (continued)
- [Qemu-devel] [PULL v2 14/25] block: Convert .bdrv_aio_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 15/25] block: Add .bdrv_co_pdiscard() driver callback, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 18/25] iscsi: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 16/25] blkreplay: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 17/25] gluster: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 19/25] nbd: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 20/25] qcow2: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 22/25] sheepdog: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 21/25] raw_bsd: Switch .bdrv_co_discard() to byte-based, Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 23/25] block: Kill .bdrv_co_discard(), Stefan Hajnoczi, 2016/07/20
- [Qemu-devel] [PULL v2 24/25] nbd: Convert to byte-based interface,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL v2 25/25] raw_bsd: Convert to byte-based interface, Stefan Hajnoczi, 2016/07/20
- Re: [Qemu-devel] [PULL v2 00/25] Block patches, Peter Maydell, 2016/07/20