File lu-add-sense-data-to-out-of-range-read-and-write-err.patch of Package istgt
From 6beb4b34a2441dc4c3d5211ecb2fd01e35cde69b Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss@suse.de>
Date: Tue, 26 Mar 2013 18:56:32 +0100
Subject: [PATCH 04/12] lu: add sense data to out of range read and write
errors
ILLEGAL_REQUEST/LOGICAL BLOCK ADDRESS OUT OF RANGE.
---
src/istgt_lu_disk.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git src/istgt_lu_disk.c src/istgt_lu_disk.c
index 5ff5b09..2319a85 100644
--- src/istgt_lu_disk.c
+++ src/istgt_lu_disk.c
@@ -4069,7 +4069,13 @@ istgt_lu_disk_lbread(ISTGT_LU_DISK *spec, CONN_Ptr conn __attribute__((__unused_
maxlba, lba, len);
if (lba >= maxlba || llen > maxlba || lba > (maxlba - llen)) {
+ uint8_t *sense_data;
+ size_t *sense_len;
ISTGT_ERRLOG("end of media\n");
+ sense_data = lu_cmd->sense_data;
+ sense_len = &lu_cmd->sense_data_len;
+ *sense_len = 0;
+ BUILD_SENSE(ILLEGAL_REQUEST, 0x21, 0x00);
return -1;
}
@@ -4128,7 +4134,13 @@ istgt_lu_disk_lbwrite(ISTGT_LU_DISK *spec, CONN_Ptr conn, ISTGT_LU_CMD_Ptr lu_cm
maxlba, lba, len);
if (lba >= maxlba || llen > maxlba || lba > (maxlba - llen)) {
+ uint8_t *sense_data;
+ size_t *sense_len;
ISTGT_ERRLOG("end of media\n");
+ sense_data = lu_cmd->sense_data;
+ sense_len = &lu_cmd->sense_data_len;
+ *sense_len = 0;
+ BUILD_SENSE(ILLEGAL_REQUEST, 0x21, 0x00);
return -1;
}
@@ -4188,12 +4200,18 @@ istgt_lu_disk_lbwrite_same(ISTGT_LU_DISK *spec, CONN_Ptr conn, ISTGT_LU_CMD_Ptr
uint64_t nblocks;
uint64_t wblocks;
int64_t rc;
+ uint8_t *sense_data;
+ size_t *sense_len;
+ sense_data = lu_cmd->sense_data;
+ sense_len = &lu_cmd->sense_data_len;
+ *sense_len = 0;
maxlba = spec->blockcnt;
llen = (uint64_t) len;
if (llen == 0) {
if (lba >= maxlba) {
ISTGT_ERRLOG("end of media\n");
+ BUILD_SENSE(ILLEGAL_REQUEST, 0x21, 0x00);
return -1;
}
llen = maxlba - lba;
@@ -4208,6 +4226,7 @@ istgt_lu_disk_lbwrite_same(ISTGT_LU_DISK *spec, CONN_Ptr conn, ISTGT_LU_CMD_Ptr
if (lba >= maxlba || llen > maxlba || lba > (maxlba - llen)) {
ISTGT_ERRLOG("end of media\n");
+ BUILD_SENSE(ILLEGAL_REQUEST, 0x21, 0x00);
return -1;
}
--
2.1.2