All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: vsementsov@virtuozzo.com, berto@igalia.com,
	qemu-devel@nongnu.org, qemu-block@nongnu.org, mreitz@redhat.com
Subject: Re: [PATCH v5 4/9] qcow2: Support BDRV_REQ_ZERO_WRITE for truncate
Date: Wed, 22 Apr 2020 17:58:35 +0200	[thread overview]
Message-ID: <20200422155835.GC7155@linux.fritz.box> (raw)
In-Reply-To: <84c6ca49-aef3-adf4-2efe-68357dd20ce8@redhat.com>

Am 22.04.2020 um 17:33 hat Eric Blake geschrieben:
> On 4/22/20 10:21 AM, Kevin Wolf wrote:
> > If BDRV_REQ_ZERO_WRITE is set and we're extending the image, calling
> > qcow2_cluster_zeroize() with flags=0 does the right thing: It doesn't
> > undo any previous preallocation, but just adds the zero flag to all
> > relevant L2 entries. If an external data file is in use, a write_zeroes
> > request to the data file is made instead.
> > 
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> >   block/qcow2.c | 30 ++++++++++++++++++++++++++++++
> >   1 file changed, 30 insertions(+)
> > 
> 
> > @@ -4214,6 +4215,35 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
> >           g_assert_not_reached();
> >       }
> > +    if ((flags & BDRV_REQ_ZERO_WRITE) && offset > old_length) {
> > +        uint64_t zero_start = QEMU_ALIGN_UP(old_length, s->cluster_size);
> > +        uint64_t zero_end = QEMU_ALIGN_UP(offset, s->cluster_size);
> 
> This rounds up beyond the new size...
> 
> > +
> > +        /* Use zero clusters as much as we can */
> > +        ret = qcow2_cluster_zeroize(bs, zero_start, zero_end - zero_start, 0);
> 
> and then requests that the extra be zeroed.  Does that always work, even
> when it results in pdrv_co_pwrite_zeroes beyond the end of s->data_file?

You mean the data_file_is_raw() path in qcow2_cluster_zeroize()? It's
currently not a code path that is run because we only set
BDRV_REQ_ZERO_WRITE for truncate if the image has a backing file, and
data_file_is_raw() doesn't work with backing files.

But hypothetically, if someone called truncate with BDRV_REQ_ZERO_WRITE
for such a file, I think it would fail.

> If so,
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 
> otherwise, you may have to treat the tail specially, the same way you
> treated an unaligned head.

Actually, do I even need to round the tail?

    /* Caller must pass aligned values, except at image end */
    assert(QEMU_IS_ALIGNED(offset, s->cluster_size));
    assert(QEMU_IS_ALIGNED(end_offset, s->cluster_size) ||
           end_offset == bs->total_sectors << BDRV_SECTOR_BITS);

So qcow2_cluster_zeroize() seems to accept the unaligned tail. It would
still set the zero flag for the partial last cluster and for the
external data file, bdrv_co_pwrite_zeroes() would have the correct size.

Kevin



  reply	other threads:[~2020-04-22 15:59 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-22 15:21 [PATCH v5 0/9] block: Fix resize (extending) of short overlays Kevin Wolf
2020-04-22 15:21 ` [PATCH v5 1/9] block: Add flags to BlockDriver.bdrv_co_truncate() Kevin Wolf
2020-04-23  9:41   ` Max Reitz
2020-04-23 12:42     ` Kevin Wolf
2020-04-22 15:21 ` [PATCH v5 2/9] block: Add flags to bdrv(_co)_truncate() Kevin Wolf
2020-04-23 10:04   ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 3/9] block-backend: Add flags to blk_truncate() Kevin Wolf
2020-04-23 10:34   ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 4/9] qcow2: Support BDRV_REQ_ZERO_WRITE for truncate Kevin Wolf
2020-04-22 15:33   ` Eric Blake
2020-04-22 15:58     ` Kevin Wolf [this message]
2020-04-22 16:14       ` Eric Blake
2020-04-23 13:23         ` Kevin Wolf
2020-04-23 13:59           ` Eric Blake
2020-04-23 10:53   ` Max Reitz
2020-04-23 13:25     ` Kevin Wolf
2020-04-23 13:56       ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 5/9] raw-format: " Kevin Wolf
2020-04-22 15:34   ` Eric Blake
2020-04-23 10:54   ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 6/9] file-posix: " Kevin Wolf
2020-04-23 10:57   ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 7/9] block: truncate: Don't make backing file data visible Kevin Wolf
2020-04-23 11:14   ` Max Reitz
2020-04-23 13:00     ` Kevin Wolf
2020-04-22 15:21 ` [PATCH v5 8/9] iotests: Filter testfiles out in filter_img_info() Kevin Wolf
2020-04-23 11:24   ` Max Reitz
2020-04-22 15:21 ` [PATCH v5 9/9] iotests: Test committing to short backing file Kevin Wolf
2020-04-23 11:53   ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200422155835.GC7155@linux.fritz.box \
    --to=kwolf@redhat.com \
    --cc=berto@igalia.com \
    --cc=eblake@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.