From: Avi Kivity <avi@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] qcow2: make cache=unsafe usable
Date: Wed, 7 Sep 2011 12:24:23 +0300 [thread overview]
Message-ID: <1315387463-14623-1-git-send-email-avi@redhat.com> (raw)
Currently cache=unsafe is unsafe to the point of unusability - the
caches are never written to disk except on exit so anything except
an orderly exit -- including live migration -- leaves the disk image
corrupted.
Fix by interpreting flush requests and doing everything except flushing
the underlying file. The contents of the metadata cache are transferred
to the host pagecache, so that qemu aborts keep the disk in a consistent
state, and live migration (on the same host, or if using a coherent
filesystem) works.
Signed-off-by: Avi Kivity <avi@redhat.com>
---
Untested - is this the right approach?
block/qcow2.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index bfff6cd..7ecd096 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -275,6 +275,13 @@ static int qcow2_open(BlockDriverState *bs, int flags)
ret = -EINVAL;
goto fail;
}
+ /*
+ * Request flush callbask so that we can write metadata to the host
+ * pagecache. Flushes to bs->file will still be ignored. This keeps
+ * metadata consistent in host pagecache, so we're safe wrt unexpected
+ * exits, but avoids slow disk flushes (and is vulnerable to host crashes)
+ */
+ bs->open_flags &= ~BDRV_O_NO_FLUSH;
/* Initialise locks */
qemu_co_mutex_init(&s->lock);
--
1.7.6.1
next reply other threads:[~2011-09-07 9:24 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-07 9:24 Avi Kivity [this message]
2011-09-07 9:47 ` [Qemu-devel] [PATCH] qcow2: make cache=unsafe usable Alexander Graf
2011-09-07 9:56 ` Kevin Wolf
2011-09-07 10:07 ` Avi Kivity
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=1315387463-14623-1-git-send-email-avi@redhat.com \
--to=avi@redhat.com \
--cc=kwolf@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).