[PATCH] RELEASE6/10: Release of a lock that is not held is not an error.

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

 



If an initiator sends a RELEASE6/10 but the initiator does not hold the reservation then nothing should happen. This is not an error.
This patch corrects TGTD so that it will return SUCCESS for this condition.

>From SPC-2 7.16.1 :
    It is not an error for an application client to attempt to
    release a reservation that is not currently valid, or is held
    by another initiator. In this case, the device server shall
    return GOOD status without altering any other reservation.

LIBISCSI contains a test for this, and TGTD now passes this test when this
patch is applied :

    iscsi-test --test="*0420*" iscsi://127.0.0.1/iqn.ronnie.test/1
    0420_reserve6_simple:
    ===================
    Send RESERVE6 ... [OK]
    Send RELEASE6 ... [OK]
    Test that reservation works.
    Send RESERVE6 from Initiator 1. ... [OK]
    [OK]
    Send RESERVE6 from Initiator 2. Expect conflict. ... [OK]
    Send RELEASE6 from Initiator 2..Expect NO-OP. ... [OK]
    Send TESTUNITREADY from Initiator 1 ... [OK]
    Send TESTUNITREADY from Initiator 2. Expect conflict. ... [OK]
    Test that release actually works
    Send RELEASE6 from Initiator 1 ... [OK]
    Send RESERVE6 Initiator 2 ... [OK]
    Send RELEASE6 Initiator 2 ... [OK]
    TEST T0420_reserve6_simple [OK]

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@xxxxxxxxx>
---
 usr/target.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/usr/target.c b/usr/target.c
index a8bcdbb..7b9ae12 100644
--- a/usr/target.c
+++ b/usr/target.c
@@ -887,6 +887,9 @@ int device_release(int tid, uint64_t itn_id, uint64_t lun, int force)
 		return 0;
 	}
 
+	if (lu->reserve_id != itn_id)
+		return 0;
+
 	return -EBUSY;
 }
 
-- 
1.7.3.1

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Linux RAID]     [Linux Clusters]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]

  Powered by Linux