[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 07/11] block: use int64_t instead of int in driver write_z
From: |
Eric Blake |
Subject: |
Re: [PATCH v6 07/11] block: use int64_t instead of int in driver write_zeroes handlers |
Date: |
Thu, 23 Sep 2021 15:53:14 -0500 |
User-agent: |
NeoMutt/20210205-773-8890a5 |
On Thu, Sep 23, 2021 at 03:33:45PM -0500, Eric Blake wrote:
> > +++ b/block/nbd.c
> > @@ -1407,15 +1407,17 @@ static int nbd_client_co_pwritev(BlockDriverState
> > *bs, int64_t offset,
> > }
> >
> > static int nbd_client_co_pwrite_zeroes(BlockDriverState *bs, int64_t
> > offset,
> > - int bytes, BdrvRequestFlags flags)
> > + int64_t bytes, BdrvRequestFlags
> > flags)
> > {
> > BDRVNBDState *s = (BDRVNBDState *)bs->opaque;
> > NBDRequest request = {
> > .type = NBD_CMD_WRITE_ZEROES,
> > .from = offset,
> > - .len = bytes,
> > + .len = bytes, /* .len is uint32_t actually */
> > };
> >
> > + assert(bytes < UINT32_MAX); /* relay on max_pwrite_zeroes */
>
> And again. Here, you happen to get by with < because we clamped
> bl.max_pwrite_zeroes at BDRV_REQUEST_MAX_BYTES, which is INT_MAX
> rounded down. But I had to check; whereas using <= would be less
> worrisome, even if we never get a request that large.
Whoops, I was reading a local patch of mine. Upstream has merely:
uint32_t max = MIN_NON_ZERO(NBD_MAX_BUFFER_SIZE, s->info.max_block);
bs->bl.max_pdiscard = QEMU_ALIGN_DOWN(INT_MAX, min);
bs->bl.max_pwrite_zeroes = max;
which is an even smaller limit than BDRV_REQUEST_MAX_BYTES (and
obviously one we're trying to raise). But the point remains that
using <= rather than < will make it easier to review the code where we
raise the limits (either up to the 4G-1 limit of the current protocol,
or with protocol extensions to finally get to 64-bit requests).
>
> If you agree with my analysis, I can make that change while preparing
> my pull request.
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
- [PATCH v6 02/11] qcow2: check request on vmstate save/load path, (continued)
- [PATCH v6 02/11] qcow2: check request on vmstate save/load path, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 03/11] block: use int64_t instead of uint64_t in driver read handlers, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 05/11] block: use int64_t instead of uint64_t in copy_range driver handlers, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 06/11] block: make BlockLimits::max_pwrite_zeroes 64bit, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 04/11] block: use int64_t instead of uint64_t in driver write handlers, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 07/11] block: use int64_t instead of int in driver write_zeroes handlers, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 08/11] block/io: allow 64bit write-zeroes requests, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 09/11] block: make BlockLimits::max_pdiscard 64bit, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 10/11] block: use int64_t instead of int in driver discard handlers, Vladimir Sementsov-Ogievskiy, 2021/09/03
- [PATCH v6 11/11] block/io: allow 64bit discard requests, Vladimir Sementsov-Ogievskiy, 2021/09/03
- Re: [PATCH v6 00/11] 64bit block-layer: part II, Vladimir Sementsov-Ogievskiy, 2021/09/22