[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length
From: |
Denis V. Lunev |
Subject: |
[Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length |
Date: |
Fri, 6 Feb 2015 14:24:43 +0300 |
nbd_co_discard calls nbd_client_session_co_discard which uses uint32_t
as the length in bytes of the data to discard due to the following
definition:
struct nbd_request {
uint32_t magic;
uint32_t type;
uint64_t handle;
uint64_t from;
uint32_t len; <-- the length of data to be discarded, in bytes
} QEMU_PACKED;
Thus we should limit bl_max_discard to UINT32_MAX >> BDRV_SECTOR_BITS to
avoid overflow.
NBD read/write code uses the same structure for transfers. Fix
max_transfer_length accordingly.
Signed-off-by: Denis V. Lunev <address@hidden>
CC: Peter Lieven <address@hidden>
CC: Kevin Wolf <address@hidden>
---
block/nbd.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/block/nbd.c b/block/nbd.c
index 04cc845..dda0b0b 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -301,6 +301,12 @@ static int nbd_co_flush(BlockDriverState *bs)
return nbd_client_session_co_flush(&s->client);
}
+static void nbd_refresh_limits(BlockDriverState *bs, Error **errp)
+{
+ bs->bl.max_discard = UINT32_MAX >> BDRV_SECTOR_BITS;
+ bs->bl.max_transfer_length = UINT32_MAX >> BDRV_SECTOR_BITS;
+}
+
static int nbd_co_discard(BlockDriverState *bs, int64_t sector_num,
int nb_sectors)
{
@@ -396,6 +402,7 @@ static BlockDriver bdrv_nbd = {
.bdrv_close = nbd_close,
.bdrv_co_flush_to_os = nbd_co_flush,
.bdrv_co_discard = nbd_co_discard,
+ .bdrv_refresh_limits = nbd_refresh_limits,
.bdrv_getlength = nbd_getlength,
.bdrv_detach_aio_context = nbd_detach_aio_context,
.bdrv_attach_aio_context = nbd_attach_aio_context,
@@ -413,6 +420,7 @@ static BlockDriver bdrv_nbd_tcp = {
.bdrv_close = nbd_close,
.bdrv_co_flush_to_os = nbd_co_flush,
.bdrv_co_discard = nbd_co_discard,
+ .bdrv_refresh_limits = nbd_refresh_limits,
.bdrv_getlength = nbd_getlength,
.bdrv_detach_aio_context = nbd_detach_aio_context,
.bdrv_attach_aio_context = nbd_attach_aio_context,
@@ -430,6 +438,7 @@ static BlockDriver bdrv_nbd_unix = {
.bdrv_close = nbd_close,
.bdrv_co_flush_to_os = nbd_co_flush,
.bdrv_co_discard = nbd_co_discard,
+ .bdrv_refresh_limits = nbd_refresh_limits,
.bdrv_getlength = nbd_getlength,
.bdrv_detach_aio_context = nbd_detach_aio_context,
.bdrv_attach_aio_context = nbd_attach_aio_context,
--
1.9.1
- [Qemu-devel] [PATCH V2] block: introduce BDRV_REQUEST_MAX_SECTORS, Peter Lieven, 2015/02/06
- [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length,
Denis V. Lunev <=
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Kevin Wolf, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Denis V. Lunev, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Peter Lieven, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Kevin Wolf, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Denis V. Lunev, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Peter Lieven, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Denis V. Lunev, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Peter Lieven, 2015/02/06
- Re: [Qemu-devel] [PATCH 1/1] nbd: fix max_discard/max_transfer_length, Kevin Wolf, 2015/02/06
Re: [Qemu-devel] [PATCH V2] block: introduce BDRV_REQUEST_MAX_SECTORS, Denis V. Lunev, 2015/02/06