diff options
author | Richard Jones <rjones@redhat.com> | 2010-07-22 14:39:36 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2010-08-17 16:01:40 +0100 |
commit | 8f549bd20a193bc61c6e78019c55aeb2efeb7bda (patch) | |
tree | 3380d0d6132c4cf434c07e18ab69c874a8152ec3 | |
parent | 17de7c785c921aef542681ee66538508d270fdf3 (diff) | |
download | libguestfs-8f549bd20a193bc61c6e78019c55aeb2efeb7bda.tar.gz libguestfs-8f549bd20a193bc61c6e78019c55aeb2efeb7bda.tar.xz libguestfs-8f549bd20a193bc61c6e78019c55aeb2efeb7bda.zip |
Revert "add_drive_ro adds readonly=on option if available." (RHBZ#617200).
Adding the readonly=on option is not so clever. This causes
qemu to present the disk as read-only to the guest. (The
expected behaviour of snapshots=on,readonly=on was that it
would open the disk O_RDONLY but present a writable disk to
the guest).
Since the guest sees a read-only disk, we are unable to do any
recovery if a filesystem on the disk is inconsistent. This basically
prevents most accesses to live disk images.
What we really want is a qemu option which presents a writable
disk to the guest, but only opens the disk on the host side with
O_RDONLY, to alleviate the udev bug RHBZ#571714.
This reverts commit 676462684e05dd8341dd695762dd99a87d8ec022.
(cherry picked from commit 799d52be4f08f6c70c0e8ba1aa7367ba4cdd78c4)
-rwxr-xr-x | src/generator.ml | 4 | ||||
-rw-r--r-- | src/guestfs.c | 22 |
2 files changed, 5 insertions, 21 deletions
diff --git a/src/generator.ml b/src/generator.ml index a7673c18..9617013d 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -548,15 +548,13 @@ handle is closed. We don't currently have any method to enable changes to be committed, although qemu can support this. This is equivalent to the qemu parameter -C<-drive file=filename,snapshot=on,readonly=on,if=...>. +C<-drive file=filename,snapshot=on,if=...>. C<if=...> is set at compile time by the configuration option C<./configure --with-drive-if=...>. In the rare case where you might need to change this at run time, use C<guestfs_add_drive_with_if> or C<guestfs_add_drive_ro_with_if>. -C<readonly=on> is only added where qemu supports this option. - Note that this call checks for the existence of C<filename>. This stops you from specifying other types of drive which are supported by qemu such as C<nbd:> and C<http:> URLs. To specify those, use diff --git a/src/guestfs.c b/src/guestfs.c index d23b9ae2..e55b9bae 100644 --- a/src/guestfs.c +++ b/src/guestfs.c @@ -830,6 +830,9 @@ int guestfs__add_drive_ro_with_if (guestfs_h *g, const char *filename, const char *drive_if) { + size_t len = strlen (filename) + 64; + char buf[len]; + if (strchr (filename, ',') != NULL) { error (g, _("filename cannot contain ',' (comma) character")); return -1; @@ -840,24 +843,7 @@ guestfs__add_drive_ro_with_if (guestfs_h *g, const char *filename, return -1; } - if (qemu_supports (g, NULL) == -1) - return -1; - - /* Only SCSI and virtio drivers support readonly mode. - * This is only supported as a QEMU feature since 2010/01. - */ - int supports_ro = 0; - if ((STREQ (drive_if, "scsi") || STREQ (drive_if, "virtio")) && - qemu_supports (g, "readonly=on")) - supports_ro = 1; - - size_t len = strlen (filename) + 100; - char buf[len]; - - snprintf (buf, len, "file=%s,snapshot=on,%sif=%s", - filename, - supports_ro ? "readonly=on," : "", - drive_if); + snprintf (buf, len, "file=%s,snapshot=on,if=%s", filename, drive_if); return guestfs__config (g, "-drive", buf); } |