From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32786) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDB1a-0000zP-Oi for qemu-devel@nongnu.org; Wed, 15 Jun 2016 09:38:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDB1Z-0008WB-NU for qemu-devel@nongnu.org; Wed, 15 Jun 2016 09:38:30 -0400 References: <1465939839-30097-1-git-send-email-eblake@redhat.com> <1465939839-30097-6-git-send-email-eblake@redhat.com> From: Paolo Bonzini Message-ID: <1d8398f2-88b5-4eb9-48e1-f67c67608b96@redhat.com> Date: Wed, 15 Jun 2016 15:38:19 +0200 MIME-Version: 1.0 In-Reply-To: <1465939839-30097-6-git-send-email-eblake@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 05/17] nbd: Advertise realistic limits to block layer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake , qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, kwolf@redhat.com, qemu-stable , Max Reitz On 14/06/2016 23:30, Eric Blake wrote: > We were basing the advertisement of maximum discard and transfer > length off of UINT32_MAX, but since the rest of the block layer > has signed int limits on a transaction, nothing could ever reach > that maximum, and we risk overflowing an int once things are > converted to byte-based rather than sector-based limits. What's > more, we DO have a much smaller limit: both the current kernel > and qemu-nbd have a hard limit of 32M on a read or write > transaction, and while they may also permit up to a full 32 bits > on a discard transaction, the upstream NBD protocol is proposing > wording that without any explicit advertisement otherwise, > clients should limit ALL requests to the same limits as read and > write, even though the other requests do not actually require as > many bytes across the wire. So the better limit to tell the > block layer is 32M for both values. > > Signed-off-by: Eric Blake > > --- > v2: new patch > --- > block/nbd.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/block/nbd.c b/block/nbd.c > index 6015e8b..bf67c8a 100644 > --- a/block/nbd.c > +++ b/block/nbd.c > @@ -362,8 +362,8 @@ static int nbd_co_flush(BlockDriverState *bs) > > 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; > + bs->bl.max_discard = NBD_MAX_SECTORS; > + bs->bl.max_transfer_length = NBD_MAX_SECTORS; > } > > static int nbd_co_discard(BlockDriverState *bs, int64_t sector_num, > Acked-by: Paolo Bonzini Cc: qemu-stable@nongnu.org