[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/20] block: make BlockLimits::max_pwrite_zeroes 64bit
From: |
Eric Blake |
Subject: |
[PULL 07/20] block: make BlockLimits::max_pwrite_zeroes 64bit |
Date: |
Mon, 27 Sep 2021 16:55:32 -0500 |
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
We are going to support 64 bit write-zeroes requests. Now update the
limit variable. It's absolutely safe. The variable is set in some
drivers, and used in bdrv_co_do_pwrite_zeroes().
Update also max_write_zeroes variable in bdrv_co_do_pwrite_zeroes(), so
that bdrv_co_do_pwrite_zeroes() is now prepared to 64bit requests. The
remaining logic including num, offset and bytes variables is already
supporting 64bit requests.
So the only thing that prevents 64 bit requests is limiting
max_write_zeroes variable to INT_MAX in bdrv_co_do_pwrite_zeroes().
We'll drop this limitation after updating all block drivers.
Ah, we also have bdrv_check_request32() in bdrv_co_pwritev_part(). It
will be modified to do bdrv_check_request() for write-zeroes path.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20210903102807.27127-7-vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
include/block/block_int.h | 9 +++++----
block/io.c | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 5536f49bc67c..24958acd33f4 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -686,10 +686,11 @@ typedef struct BlockLimits {
* that is set. May be 0 if bl.request_alignment is good enough */
uint32_t pdiscard_alignment;
- /* Maximum number of bytes that can zeroized at once (since it is
- * signed, it must be < 2G, if set). Must be multiple of
- * pwrite_zeroes_alignment. May be 0 if no inherent 32-bit limit */
- int32_t max_pwrite_zeroes;
+ /*
+ * Maximum number of bytes that can zeroized at once. Must be multiple of
+ * pwrite_zeroes_alignment. 0 means no limit.
+ */
+ int64_t max_pwrite_zeroes;
/* Optimal alignment for write zeroes requests in bytes. A power
* of 2 is best but not mandatory. Must be a multiple of
diff --git a/block/io.c b/block/io.c
index aa6f7b075e78..0090224603f5 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1869,7 +1869,7 @@ static int coroutine_fn
bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
int head = 0;
int tail = 0;
- int max_write_zeroes = MIN_NON_ZERO(bs->bl.max_pwrite_zeroes, INT_MAX);
+ int64_t max_write_zeroes = MIN_NON_ZERO(bs->bl.max_pwrite_zeroes, INT_MAX);
int alignment = MAX(bs->bl.pwrite_zeroes_alignment,
bs->bl.request_alignment);
int max_transfer = MIN_NON_ZERO(bs->bl.max_transfer, MAX_BOUNCE_BUFFER);
--
2.31.1
- [PULL 00/20] NBD patches through 2021-09-27, Eric Blake, 2021/09/27
- [PULL 01/20] qemu-nbd: Change default cache mode to writeback, Eric Blake, 2021/09/27
- [PULL 02/20] block/io: bring request check to bdrv_co_(read, write)v_vmstate, Eric Blake, 2021/09/27
- [PULL 03/20] qcow2: check request on vmstate save/load path, Eric Blake, 2021/09/27
- [PULL 05/20] block: use int64_t instead of uint64_t in driver write handlers, Eric Blake, 2021/09/27
- [PULL 06/20] block: use int64_t instead of uint64_t in copy_range driver handlers, Eric Blake, 2021/09/27
- [PULL 10/20] block: make BlockLimits::max_pdiscard 64bit, Eric Blake, 2021/09/27
- [PULL 11/20] block: use int64_t instead of int in driver discard handlers, Eric Blake, 2021/09/27
- [PULL 04/20] block: use int64_t instead of uint64_t in driver read handlers, Eric Blake, 2021/09/27
- [PULL 07/20] block: make BlockLimits::max_pwrite_zeroes 64bit,
Eric Blake <=
- [PULL 09/20] block/io: allow 64bit write-zeroes requests, Eric Blake, 2021/09/27
- [PULL 12/20] block/io: allow 64bit discard requests, Eric Blake, 2021/09/27
- [PULL 13/20] nbd/server: Allow LIST_META_CONTEXT without STRUCTURED_REPLY, Eric Blake, 2021/09/27
- [PULL 15/20] block/nbd: nbd_channel_error() shutdown channel unconditionally, Eric Blake, 2021/09/27
- [PULL 18/20] block/nbd: drop connection_co, Eric Blake, 2021/09/27
- [PULL 17/20] block/nbd: refactor nbd_recv_coroutines_wake_all(), Eric Blake, 2021/09/27
- [PULL 08/20] block: use int64_t instead of int in driver write_zeroes handlers, Eric Blake, 2021/09/27
- [PULL 14/20] nbd/client-connection: nbd_co_establish_connection(): fix non set errp, Eric Blake, 2021/09/27
- [PULL 16/20] block/nbd: move nbd_recv_coroutines_wake_all() up, Eric Blake, 2021/09/27
- [PULL 19/20] block/nbd: check that received handle is valid, Eric Blake, 2021/09/27