All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, Kevin Wolf <kwolf@redhat.com>,
	Max Reitz <mreitz@redhat.com>,
	qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH for-2.11 v2] file-posix: Clear out first sector in hdev_create
Date: Sat, 12 Aug 2017 09:06:09 +0800	[thread overview]
Message-ID: <20170812010609.GA13394@lemon.lan> (raw)
In-Reply-To: <f508bf20-c60d-6947-eb54-727d9fa8d686@redhat.com>

On Fri, 08/11 09:42, Eric Blake wrote:
> On 08/11/2017 03:09 AM, Fam Zheng wrote:
> > People get surprised when, after "qemu-img create -f raw /dev/sdX", they
> > still see qcow2 with "qemu-img info", if previously the bdev had a qcow2
> > header. While this is natural because raw doesn't need to write any
> > magic bytes during creation, hdev_create is free to clear out the first
> > sector to make sure the stale qcow2 header doesn't cause such confusion.
> > 
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > 
> > ---
> > 
> > v2: Use stack allocated buffer. [Eric]
> >     Fix return value.
> >     (Keep qemu_write_full instead of switching to qemu_pwritev because
> >     the former handles short writes.)
> >     Fix typo "qemu-img". [Changlong]
> > ---
> >  block/file-posix.c | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> 
> > 
> > diff --git a/block/file-posix.c b/block/file-posix.c
> > index f4de022ae0..a63bbf2b90 100644
> > --- a/block/file-posix.c
> > +++ b/block/file-posix.c
> > @@ -2703,6 +2703,16 @@ static int hdev_create(const char *filename, QemuOpts *opts,
> >          ret = -ENOSPC;
> >      }
> >  
> > +    if (total_size) {
> > +        uint8_t buf[BDRV_SECTOR_SIZE] = { 0 };
> > +        int64_t zero_size = MIN(BDRV_SECTOR_SIZE, total_size);
> > +        if (lseek(fd, 0, SEEK_SET) == -1) {
> > +            ret = -errno;
> > +        } else {
> > +            ret = qemu_write_full(fd, buf, zero_size);
> > +            ret = ret == zero_size ? 0 : -errno;
> > +        }
> > +    }
> 
> Question: are we ever constrained by O_DIRECT where writing only 512
> bytes would be too small for a block device that mandates 4k alignment?
> If so, then we need MAX(minimum write size, MIN(BDRV_SECTOR_SIZE,
> total_size)) - it would also mean we can't stack-allocate any more, but
> that we have to do an aligned buffer allocation (where g_malloc is not
> necessarily suitably aligned).
> 
> If O_DIRECT is not a problem, then this is okay:

A few lines above:


    fd = qemu_open(filename, O_WRONLY | O_BINARY);

so there is no O_DIRECT issue.

Fam

  reply	other threads:[~2017-08-12  1:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-11  8:09 [Qemu-devel] [PATCH for-2.11 v2] file-posix: Clear out first sector in hdev_create Fam Zheng
2017-08-11 14:42 ` Eric Blake
2017-08-12  1:06   ` Fam Zheng [this message]
2017-08-31  6:53 ` Fam Zheng
2017-09-07 15:07 ` Kevin Wolf
2017-09-08  9:44   ` Fam Zheng

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=20170812010609.GA13394@lemon.lan \
    --to=famz@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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.