diff options
author | Roland Dreier <roland@purestorage.com> | 2012-02-13 19:18:14 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-02-25 17:37:49 -0500 |
commit | d95b82461c56a6ff8ff248b101049a69ebb20278 (patch) | |
tree | 0a0c8ad9d37c529c859ddcdfc7123b80bd195b0c /include/target | |
parent | 3d28934aaae5e924afedf0f5cb42e1316514da6b (diff) |
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.h | 2 |
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 @@ | |||
118 | /* Queue Algorithm Modifier default for restricted reordering in control mode page */ | 118 | /* Queue Algorithm Modifier default for restricted reordering in control mode page */ |
119 | #define DA_EMULATE_REST_REORD 0 | 119 | #define DA_EMULATE_REST_REORD 0 |
120 | 120 | ||
121 | #define SE_INQUIRY_BUF 512 | ||
121 | #define SE_MODE_PAGE_BUF 512 | 122 | #define SE_MODE_PAGE_BUF 512 |
122 | 123 | ||
123 | |||
124 | /* struct se_hba->hba_flags */ | 124 | /* struct se_hba->hba_flags */ |
125 | enum hba_flags_table { | 125 | enum hba_flags_table { |
126 | HBA_FLAGS_INTERNAL_USE = 0x01, | 126 | HBA_FLAGS_INTERNAL_USE = 0x01, |