summaryrefslogtreecommitdiff
path: root/include/target
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2012-02-14 04:18:14 +0400
committerNicholas Bellinger <nab@linux-iscsi.org>2012-02-26 02:37:49 +0400
commitd95b82461c56a6ff8ff248b101049a69ebb20278 (patch)
tree0a0c8ad9d37c529c859ddcdfc7123b80bd195b0c /include/target
parent3d28934aaae5e924afedf0f5cb42e1316514da6b (diff)
downloadlinux-d95b82461c56a6ff8ff248b101049a69ebb20278.tar.xz
target: Fix up handling of short INQUIRY buffers
If the initiator sends us an INQUIRY command with an allocation length that's shorter than what we want to return, we're simply supposed to truncate our response and return what the initiator gave us space for, without signaling any error. Current target code has various tests that don't fill out the full response if the buffer is too short and sometimes return errors incorrectly. Fix this up by allocating a bounce buffer for INQUIRY responses if we need to, ie if we have cmd->data_length too small as well as SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC set in cmd->se_cmd_flags -- for most fabrics, we always allocate at least a full page, but for tcm_loop we may have a small buffer coming directly from the SCSI stack. This lets us delete a lot of cmd->data_length checking, and also makes our INQUIRY handling correct per SPC in a lot more cases. Signed-off-by: Roland Dreier <roland@purestorage.com> Cc: stable@vger.kernel.org Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'include/target')
-rw-r--r--include/target/target_core_base.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index bbcf803e0916..99d7373ef834 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -118,9 +118,9 @@
/* Queue Algorithm Modifier default for restricted reordering in control mode page */
#define DA_EMULATE_REST_REORD 0
+#define SE_INQUIRY_BUF 512
#define SE_MODE_PAGE_BUF 512
-
/* struct se_hba->hba_flags */
enum hba_flags_table {
HBA_FLAGS_INTERNAL_USE = 0x01,