* [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code
@ 2013-01-29 22:26 Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 1/3] target: Fix zero-length INQUIRY additional sense code regression Nicholas A. Bellinger
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Nicholas A. Bellinger @ 2013-01-29 22:26 UTC (permalink / raw)
To: target-devel
Cc: linux-scsi, Christoph Hellwig, Paolo Bonzini, Roland Dreier,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
Hi folks,
The following are a handful of zero-length CDB regression bugfixes to address
breakage introduced by the recent sense_reason_t conversion in v3.8-rc1 code,
which incorrectly assumed CHECK_CONDITION status (in all CDB emulation cases)
when NULL was returned by transport_kmap_data_sg().
Please review, as I'd like to get these into v3.8-rc6.
Thank you,
--nab
Nicholas Bellinger (3):
target: Fix zero-length INQUIRY additional sense code regression
target: Fix zero-length MODE_SENSE regression
target: Fix zero-length READ_CAPACITY_16 regression
drivers/target/target_core_sbc.c | 18 +++++++--------
drivers/target/target_core_spc.c | 44 +++++++++----------------------------
2 files changed, 19 insertions(+), 43 deletions(-)
--
1.7.2.5
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] target: Fix zero-length INQUIRY additional sense code regression
2013-01-29 22:26 [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Nicholas A. Bellinger
@ 2013-01-29 22:26 ` Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 2/3] target: Fix zero-length MODE_SENSE regression Nicholas A. Bellinger
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Nicholas A. Bellinger @ 2013-01-29 22:26 UTC (permalink / raw)
To: target-devel
Cc: linux-scsi, Christoph Hellwig, Paolo Bonzini, Roland Dreier,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes a minor regression introduced in v3.8-rc1 code
where a zero-length INQUIRY was no longer returning the correct
INVALID FIELD IN CDB additional sense code.
This regression was introduced with the following commit:
commit de103c93aff0bed0ae984274e5dc8b95899badab
Author: Christoph Hellwig <hch@lst.de>
Date: Tue Nov 6 12:24:09 2012 -0800
target: pass sense_reason as a return value
and this patch has been tested with the following zero-length CDB:
sg_raw /dev/sdd 12 00 83 00 00 00
SCSI Status: Check Condition
Sense Information:
Fixed format, current; Sense key: Illegal Request
Additional sense: Invalid field in cdb
Cc: Christoph Hellwig <hch@lst.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/target_core_spc.c | 9 ++++-----
1 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 84f9e96..f8857d4 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -641,11 +641,10 @@ spc_emulate_inquiry(struct se_cmd *cmd)
out:
rbuf = transport_kmap_data_sg(cmd);
- if (!rbuf)
- return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
-
- memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
- transport_kunmap_data_sg(cmd);
+ if (rbuf) {
+ memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
+ transport_kunmap_data_sg(cmd);
+ }
if (!ret)
target_complete_cmd(cmd, GOOD);
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] target: Fix zero-length MODE_SENSE regression
2013-01-29 22:26 [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 1/3] target: Fix zero-length INQUIRY additional sense code regression Nicholas A. Bellinger
@ 2013-01-29 22:26 ` Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 3/3] target: Fix zero-length READ_CAPACITY_16 regression Nicholas A. Bellinger
2013-01-30 9:24 ` [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Paolo Bonzini
3 siblings, 0 replies; 5+ messages in thread
From: Nicholas A. Bellinger @ 2013-01-29 22:26 UTC (permalink / raw)
To: target-devel
Cc: linux-scsi, Christoph Hellwig, Paolo Bonzini, Roland Dreier,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes a regression introduced in v3.8-rc1 code where
a zero-length MODE_SENSE was no longer returning GOOD status, but
instead returning TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE to generate
a CHECK_CONDITION status.
This regression was introduced with the following commit:
commit de103c93aff0bed0ae984274e5dc8b95899badab
Author: Christoph Hellwig <hch@lst.de>
Date: Tue Nov 6 12:24:09 2012 -0800
target: pass sense_reason as a return value
and this patch has been tested with the following zero-length CDB:
sg_raw /dev/sdd 5a 00 0a 00 00 00 00 00 00 00
SCSI Status: Good
Sense Information:
sense buffer empty
Cc: Christoph Hellwig <hch@lst.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/target_core_spc.c | 35 +++++++----------------------------
1 files changed, 7 insertions(+), 28 deletions(-)
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index f8857d4..2d88f08 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -850,7 +850,7 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
char *cdb = cmd->t_task_cdb;
- unsigned char *buf, *map_buf;
+ unsigned char buf[SE_MODE_PAGE_BUF], *rbuf;
int type = dev->transport->get_device_type(dev);
int ten = (cmd->t_task_cdb[0] == MODE_SENSE_10);
bool dbd = !!(cdb[1] & 0x08);
@@ -862,26 +862,8 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
int ret;
int i;
- map_buf = transport_kmap_data_sg(cmd);
- if (!map_buf)
- return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
- /*
- * If SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC is not set, then we
- * know we actually allocated a full page. Otherwise, if the
- * data buffer is too small, allocate a temporary buffer so we
- * don't have to worry about overruns in all our INQUIRY
- * emulation handling.
- */
- if (cmd->data_length < SE_MODE_PAGE_BUF &&
- (cmd->se_cmd_flags & SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC)) {
- buf = kzalloc(SE_MODE_PAGE_BUF, GFP_KERNEL);
- if (!buf) {
- transport_kunmap_data_sg(cmd);
- return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
- }
- } else {
- buf = map_buf;
- }
+ memset(buf, 0, SE_MODE_PAGE_BUF);
+
/*
* Skip over MODE DATA LENGTH + MEDIUM TYPE fields to byte 3 for
* MODE_SENSE_10 and byte 2 for MODE_SENSE (6).
@@ -933,8 +915,6 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
if (page == 0x3f) {
if (subpage != 0x00 && subpage != 0xff) {
pr_warn("MODE_SENSE: Invalid subpage code: 0x%02x\n", subpage);
- kfree(buf);
- transport_kunmap_data_sg(cmd);
return TCM_INVALID_CDB_FIELD;
}
@@ -971,7 +951,6 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
pr_err("MODE SENSE: unimplemented page/subpage: 0x%02x/0x%02x\n",
page, subpage);
- transport_kunmap_data_sg(cmd);
return TCM_UNKNOWN_MODE_PAGE;
set_length:
@@ -980,12 +959,12 @@ set_length:
else
buf[0] = length - 1;
- if (buf != map_buf) {
- memcpy(map_buf, buf, cmd->data_length);
- kfree(buf);
+ rbuf = transport_kmap_data_sg(cmd);
+ if (rbuf) {
+ memcpy(rbuf, buf, min_t(u32, SE_MODE_PAGE_BUF, cmd->data_length));
+ transport_kunmap_data_sg(cmd);
}
- transport_kunmap_data_sg(cmd);
target_complete_cmd(cmd, GOOD);
return 0;
}
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] target: Fix zero-length READ_CAPACITY_16 regression
2013-01-29 22:26 [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 1/3] target: Fix zero-length INQUIRY additional sense code regression Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 2/3] target: Fix zero-length MODE_SENSE regression Nicholas A. Bellinger
@ 2013-01-29 22:26 ` Nicholas A. Bellinger
2013-01-30 9:24 ` [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Paolo Bonzini
3 siblings, 0 replies; 5+ messages in thread
From: Nicholas A. Bellinger @ 2013-01-29 22:26 UTC (permalink / raw)
To: target-devel
Cc: linux-scsi, Christoph Hellwig, Paolo Bonzini, Roland Dreier,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes a regression introduced in v3.8-rc1 code where a
zero-length READ_CAPACITY_16 was no longer returning GOOD status, but
instead returning TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE to generate
a CHECK_CONDITION status.
This regression was introduced with the following commit:
commit de103c93aff0bed0ae984274e5dc8b95899badab
Author: Christoph Hellwig <hch@lst.de>
Date: Tue Nov 6 12:24:09 2012 -0800
target: pass sense_reason as a return value
and this patch has been tested with the following zero-length CDB:
sg_raw /dev/sdd 9e 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SCSI Status: Good
Sense Information:
sense buffer empty
Also, convert sbc_emulate_readcapacity() to follow the same method
of handling transport_kmap_data_sg() return values, but we never
expect a zero-length request here.
Cc: Christoph Hellwig <hch@lst.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/target_core_sbc.c | 18 ++++++++----------
1 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
index 26a6d18..a664c66 100644
--- a/drivers/target/target_core_sbc.c
+++ b/drivers/target/target_core_sbc.c
@@ -58,11 +58,10 @@ sbc_emulate_readcapacity(struct se_cmd *cmd)
buf[7] = dev->dev_attrib.block_size & 0xff;
rbuf = transport_kmap_data_sg(cmd);
- if (!rbuf)
- return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
-
- memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
- transport_kunmap_data_sg(cmd);
+ if (rbuf) {
+ memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
+ transport_kunmap_data_sg(cmd);
+ }
target_complete_cmd(cmd, GOOD);
return 0;
@@ -97,11 +96,10 @@ sbc_emulate_readcapacity_16(struct se_cmd *cmd)
buf[14] = 0x80;
rbuf = transport_kmap_data_sg(cmd);
- if (!rbuf)
- return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
-
- memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
- transport_kunmap_data_sg(cmd);
+ if (rbuf) {
+ memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
+ transport_kunmap_data_sg(cmd);
+ }
target_complete_cmd(cmd, GOOD);
return 0;
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code
2013-01-29 22:26 [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Nicholas A. Bellinger
` (2 preceding siblings ...)
2013-01-29 22:26 ` [PATCH 3/3] target: Fix zero-length READ_CAPACITY_16 regression Nicholas A. Bellinger
@ 2013-01-30 9:24 ` Paolo Bonzini
3 siblings, 0 replies; 5+ messages in thread
From: Paolo Bonzini @ 2013-01-30 9:24 UTC (permalink / raw)
To: Nicholas A. Bellinger
Cc: target-devel, linux-scsi, Christoph Hellwig, Roland Dreier
Il 29/01/2013 23:26, Nicholas A. Bellinger ha scritto:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> Hi folks,
>
> The following are a handful of zero-length CDB regression bugfixes to address
> breakage introduced by the recent sense_reason_t conversion in v3.8-rc1 code,
> which incorrectly assumed CHECK_CONDITION status (in all CDB emulation cases)
> when NULL was returned by transport_kmap_data_sg().
>
> Please review, as I'd like to get these into v3.8-rc6.
>
> Thank you,
>
> --nab
>
> Nicholas Bellinger (3):
> target: Fix zero-length INQUIRY additional sense code regression
> target: Fix zero-length MODE_SENSE regression
> target: Fix zero-length READ_CAPACITY_16 regression
>
> drivers/target/target_core_sbc.c | 18 +++++++--------
> drivers/target/target_core_spc.c | 44 +++++++++----------------------------
> 2 files changed, 19 insertions(+), 43 deletions(-)
>
Looks good, but given the mess I made in my own zero-length patches,
don't really count it as a Reviewed-by.
Paolo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-01-30 9:24 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-29 22:26 [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 1/3] target: Fix zero-length INQUIRY additional sense code regression Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 2/3] target: Fix zero-length MODE_SENSE regression Nicholas A. Bellinger
2013-01-29 22:26 ` [PATCH 3/3] target: Fix zero-length READ_CAPACITY_16 regression Nicholas A. Bellinger
2013-01-30 9:24 ` [PATCH 0/3] target: Fix zero-length regressions in v3.8-rc1 code Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).