SCST_DATA_WRITE, 4, SCST_UNKNOWN_LENGTH, 1, 0}, /*N2! */
{0x93, " M ", "ERASE(16)",
SCST_DATA_NONE, 0, SCST_LONG_TIMEOUT, 0, 0},
- {0x9E, "M ", "SERVICE ACTION IN",
- SCST_DATA_READ, 4, 0, 0, 0},
+ {0x9E, "O ", "SERVICE ACTION IN",
+ SCST_DATA_READ, 0, 0, 0, 0},
/* 12-bytes length CDB */
{0xA0, "VVVVVVVVVV M ", "REPORT LUN",
}
}
if (!info_p->transfer_len) {
- TRACE(TRACE_SCSI,
- "Warning! transfer_len 0, direction %d change on " "%d",
- info_p->direction, SCST_DATA_NONE);
+ TRACE_DBG("Warning! transfer_len 0, direction %d change on %d",
+ info_p->direction, SCST_DATA_NONE);
info_p->direction = SCST_DATA_NONE;
}
TRACE_DBG("Dev handler %s parse() returned %d",
dev->handler->name, state);
- if (cmd->data_len == -1)
- cmd->data_len = cmd->bufflen;
-
if (state == SCST_CMD_STATE_DEFAULT)
state = SCST_CMD_STATE_PREPARE_SPACE;
}
else
state = SCST_CMD_STATE_PREPARE_SPACE;
+ if (scst_cmd_is_expected_set(cmd)) {
+ if (cmd->expected_transfer_len < cmd->bufflen) {
+ TRACE(TRACE_SCSI, "cmd->expected_transfer_len(%d) < "
+ "cmd->bufflen(%d), using expected_transfer_len "
+ "instead", cmd->expected_transfer_len,
+ cmd->bufflen);
+ cmd->bufflen = cmd->expected_transfer_len;
+ }
+ }
+
+ if (cmd->data_len == -1)
+ cmd->data_len = cmd->bufflen;
+
#ifdef EXTRACHECKS
if (state != SCST_CMD_STATE_NEED_THREAD_CTX) {
if (((cmd->data_direction == SCST_DATA_UNKNOWN) &&