Am 14.05.2012 05:34, schrieb ext Nicholas A. Bellinger:
On Sun, 2012-05-13 at 23:39 +0200, Bernhard Kohl wrote:
The reservation must not be released if it is hold by a different ISID.
Signed-off-by: Bernhard Kohl<bernhard.kohl@xxxxxxx>
---
drivers/target/target_core_pr.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index eb48b15..5fd4dd3 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -214,6 +214,9 @@ int target_scsi2_reservation_release(struct se_cmd *cmd)
if (dev->dev_reserved_node_acl != sess->se_node_acl)
goto out_unlock;
+ if (dev->dev_res_bin_isid != sess->sess_bin_isid)
+ goto out_unlock;
+
dev->dev_reserved_node_acl = NULL;
dev->dev_flags&= ~DF_SPC2_RESERVATIONS;
if (dev->dev_flags& DF_SPC2_RESERVATIONS_WITH_ISID) {
Hi Bernhard,
I'm not sure if the iSCSI ISID check here really makes any difference
with legacy SPC-2 reservations, because ISIDs from different sessions to
the same iSCSI target endpoint are still going to be using the same
sess->se_node_acl pointer for different ISIDs to same InitiatorName..
Do you have a use-case where this patch is really required..?
--nab
Hi Nicholas,
yes, I have an use case.
We have an old OS which which does multi-initiator on SCSI disks.
There are always 2 instances which access the same disk and coordinate
this using SPC-2 RESERVE/RELEASE.
For testing I run these boxes in qemu-kvm on the same host. I configure
the same backstores/fileio to one tpg via two different portals. Then
I get e.g. /dev/sg8 and /dev/sg9 which are attached to the different
VMs. Using /dev/sg* instead of /dev/sd* the guest's SCSI commands go
through to the devices.
For simple verification of the reservation the following should work.
[bernd@lionel ~]$ # SCSI Reserve
[bernd@lionel ~]$ sg_raw /dev/sg8 16 00 00 00 00 00
SCSI Status: Good
Sense Information:
sense buffer empty
[bernd@lionel ~]$ # SCSI Reserve
[bernd@lionel ~]$ sg_raw /dev/sg9 16 00 00 00 00 00
SCSI Status: Reservation Conflict
Sense Information:
sense buffer empty
[bernd@lionel ~]$ # SCSI Release
[bernd@lionel ~]$ sg_raw /dev/sg9 17 00 00 00 00 00
SCSI Status: Good
Sense Information:
sense buffer empty
[bernd@lionel ~]$ # SCSI Reserve
[bernd@lionel ~]$ sg_raw /dev/sg9 16 00 00 00 00 00
SCSI Status: Reservation Conflict
Sense Information:
sense buffer empty
Without my patch the second reservation conflict does not occur, which
is definitely wrong. Doing the same with external iSCSI devices, e.g.
EMC or HP (DotHill based SW), works well as expected.
Bernhard
--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html