|
@@ -823,24 +823,22 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
|
|
if (((hdr->flags & ISCSI_FLAG_CMD_READ) ||
|
|
|
(hdr->flags & ISCSI_FLAG_CMD_WRITE)) && !hdr->data_length) {
|
|
|
/*
|
|
|
- * Vmware ESX v3.0 uses a modified Cisco Initiator (v3.4.2)
|
|
|
- * that adds support for RESERVE/RELEASE. There is a bug
|
|
|
- * add with this new functionality that sets R/W bits when
|
|
|
- * neither CDB carries any READ or WRITE datapayloads.
|
|
|
+ * From RFC-3720 Section 10.3.1:
|
|
|
+ *
|
|
|
+ * "Either or both of R and W MAY be 1 when either the
|
|
|
+ * Expected Data Transfer Length and/or Bidirectional Read
|
|
|
+ * Expected Data Transfer Length are 0"
|
|
|
+ *
|
|
|
+ * For this case, go ahead and clear the unnecssary bits
|
|
|
+ * to avoid any confusion with ->data_direction.
|
|
|
*/
|
|
|
- if ((hdr->cdb[0] == 0x16) || (hdr->cdb[0] == 0x17)) {
|
|
|
- hdr->flags &= ~ISCSI_FLAG_CMD_READ;
|
|
|
- hdr->flags &= ~ISCSI_FLAG_CMD_WRITE;
|
|
|
- goto done;
|
|
|
- }
|
|
|
+ hdr->flags &= ~ISCSI_FLAG_CMD_READ;
|
|
|
+ hdr->flags &= ~ISCSI_FLAG_CMD_WRITE;
|
|
|
|
|
|
- pr_err("ISCSI_FLAG_CMD_READ or ISCSI_FLAG_CMD_WRITE"
|
|
|
+ pr_warn("ISCSI_FLAG_CMD_READ or ISCSI_FLAG_CMD_WRITE"
|
|
|
" set when Expected Data Transfer Length is 0 for"
|
|
|
- " CDB: 0x%02x. Bad iSCSI Initiator.\n", hdr->cdb[0]);
|
|
|
- return iscsit_add_reject_cmd(cmd,
|
|
|
- ISCSI_REASON_BOOKMARK_INVALID, buf);
|
|
|
+ " CDB: 0x%02x, Fixing up flags\n", hdr->cdb[0]);
|
|
|
}
|
|
|
-done:
|
|
|
|
|
|
if (!(hdr->flags & ISCSI_FLAG_CMD_READ) &&
|
|
|
!(hdr->flags & ISCSI_FLAG_CMD_WRITE) && (hdr->data_length != 0)) {
|