[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 09/15] iscsi: Handle write protected case in reopen
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 09/15] iscsi: Handle write protected case in reopen |
Date: |
Mon, 2 Mar 2015 11:08:48 +0100 |
From: Fam Zheng <address@hidden>
Save the write protected flag and check before reopen.
Signed-off-by: Fam Zheng <address@hidden>
Message-Id: <address@hidden>
[Fixed typo in the name of the new field. - Paolo]
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/iscsi.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index 12ddbfb..1fa855a 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -65,6 +65,7 @@ typedef struct IscsiLun {
unsigned long *allocationmap;
int cluster_sectors;
bool use_16_for_rw;
+ bool write_protected;
} IscsiLun;
typedef struct IscsiTask {
@@ -1268,10 +1269,6 @@ out:
/*
* We support iscsi url's on the form
* iscsi://[<username>%<password>@]<host>[:<port>]/<targetname>/<lun>
- *
- * Note: flags are currently not used by iscsi_open. If this function
- * is changed such that flags are used, please examine iscsi_reopen_prepare()
- * to see if needs to be changed as well.
*/
static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
@@ -1385,9 +1382,10 @@ static int iscsi_open(BlockDriverState *bs, QDict
*options, int flags,
scsi_free_scsi_task(task);
task = NULL;
+ iscsilun->write_protected = iscsi_is_write_protected(iscsilun);
/* Check the write protect flag of the LUN if we want to write */
if (iscsilun->type == TYPE_DISK && (flags & BDRV_O_RDWR) &&
- iscsi_is_write_protected(iscsilun)) {
+ iscsilun->write_protected) {
error_setg(errp, "Cannot open a write protected LUN as read-write");
ret = -EACCES;
goto out;
@@ -1541,13 +1539,17 @@ static void iscsi_refresh_limits(BlockDriverState *bs,
Error **errp)
sector_limits_lun2qemu(iscsilun->bl.opt_xfer_len, iscsilun);
}
-/* Since iscsi_open() ignores bdrv_flags, there is nothing to do here in
- * prepare. Note that this will not re-establish a connection with an iSCSI
- * target - it is effectively a NOP. */
+/* Note that this will not re-establish a connection with an iSCSI target - it
+ * is effectively a NOP. */
static int iscsi_reopen_prepare(BDRVReopenState *state,
BlockReopenQueue *queue, Error **errp)
{
- /* NOP */
+ IscsiLun *iscsilun = state->bs->opaque;
+
+ if (state->flags & BDRV_O_RDWR && iscsilun->write_protected) {
+ error_setg(errp, "Cannot open a write protected LUN as read-write");
+ return -EACCES;
+ }
return 0;
}
--
2.3.0
- [Qemu-devel] [PULL 00/15] Misc changes for 2015-03-02, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 02/15] block: Forbid bdrv_set_aio_context outside BQL, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 03/15] virtio-scsi-dataplane: Call blk_set_aio_context within BQL, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 04/15] timer: replace time() with QEMU_CLOCK_HOST, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 05/15] bootdevice: fix segment fault when booting guest with '-kernel' and '-initrd', Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 06/15] Add specific config options for PCI-E bridges, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 07/15] Create specific config option for "platform-bus", Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 08/15] Give ivshmem its own config option, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 01/15] scsi: give device a parent before setting properties, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 09/15] iscsi: Handle write protected case in reopen,
Paolo Bonzini <=
- [Qemu-devel] [PULL 13/15] virtio-scsi: Allocate op blocker reason before blocking, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 10/15] Makefile: fix up parallel building under MSYS+MinGW, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 11/15] Makefile: don't silence mak file test with V=1, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 14/15] cpus: fix deadlock and segfault in qemu_mutex_lock_iothread, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 15/15] cpus: be more paranoid in avoiding deadlocks, Paolo Bonzini, 2015/03/02
- [Qemu-devel] [PULL 12/15] Makefile.target: binary depends on config-devices, Paolo Bonzini, 2015/03/02
- Re: [Qemu-devel] [PULL 00/15] Misc changes for 2015-03-02, Eric Blake, 2015/03/02
- Re: [Qemu-devel] [PULL 00/15] Misc changes for 2015-03-02, Peter Maydell, 2015/03/03