qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] Pass the drive's readonly attribute to the guest OS


From: Naphtali Sprei
Subject: [Qemu-devel] [PATCH] Pass the drive's readonly attribute to the guest OS
Date: Wed, 14 Oct 2009 17:52:29 +0200
User-agent: Thunderbird 2.0.0.23 (X11/20090817)

Hi,
as a preliminary step for adding read only flag for the -drive command, I've 
added code to pass
the (existing) read only attribute of the drive to the guest OS (if it bother 
to ask).

I've added for virtio and for scsi.

Verified it already works for floppy.

Searched like mad (in linux sources) for same read only/write protect attribute 
for ide, but all I found was only for ide-floppy.
I assume it's not supported in ide drives. Please correct me if I'm wrong.

I don't know about the other interface types for the drive command: sd, mtd, 
floppy, pflash. Where is usb ??
Will be happy to add those, too, if applicable. Please advise.

I'm planning to investigate where qemu should check the read only attribute 
before exeuting any write command
to drives, would be sent in a different patch.

 Naphtali

Signed-off-by: Naphtali Sprei <address@hidden>
---
 hw/scsi-disk.c  |    3 ++-
 hw/virtio-blk.c |    3 +++
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 3940726..e4511fb 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -631,7 +631,8 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t 
tag,
             memset(p, 0, 4);
             outbuf[1] = 0; /* Default media type.  */
             outbuf[3] = 0; /* Block descriptor length.  */
-            if (bdrv_get_type_hint(s->dinfo->bdrv) == BDRV_TYPE_CDROM) {
+            if (bdrv_get_type_hint(s->dinfo->bdrv) == BDRV_TYPE_CDROM ||
+                bdrv_is_read_only(s->dinfo->bdrv)) {
                 outbuf[2] = 0x80; /* Readonly.  */
             }
             p += 4;
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 2630b99..e6df9f2 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -444,6 +444,9 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
 #endif
     if (strcmp(s->serial_str, "0"))
         features |= 1 << VIRTIO_BLK_F_IDENTIFY;
+    
+    if (bdrv_is_read_only(s->bs))
+        features |= 1 << VIRTIO_BLK_F_RO;
 
     return features;
 }
-- 
1.6.3.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]