scsi: Move scsi_task_process_null_lun from lun.c to task.c
The next patch will add scsi_task_process_abort to task.c for proper task management functions. scsi_task_process_null_lun doesn't use struct spdk_scsi_lun and having both in the same file will improve maintainability. Change-Id: I6fd91aad84e62d14ecb7b44794db391a82cb4b12 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/436079 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
12e00e5251
commit
5a365f3643
@ -160,43 +160,6 @@ spdk_scsi_lun_execute_mgmt_task(struct spdk_scsi_lun *lun)
|
||||
_spdk_scsi_lun_execute_mgmt_task(lun, task);
|
||||
}
|
||||
|
||||
void
|
||||
spdk_scsi_task_process_null_lun(struct spdk_scsi_task *task)
|
||||
{
|
||||
uint8_t buffer[36];
|
||||
uint32_t allocation_len;
|
||||
uint32_t data_len;
|
||||
|
||||
task->length = task->transfer_len;
|
||||
if (task->cdb[0] == SPDK_SPC_INQUIRY) {
|
||||
/*
|
||||
* SPC-4 states that INQUIRY commands to an unsupported LUN
|
||||
* must be served with PERIPHERAL QUALIFIER = 0x3 and
|
||||
* PERIPHERAL DEVICE TYPE = 0x1F.
|
||||
*/
|
||||
data_len = sizeof(buffer);
|
||||
|
||||
memset(buffer, 0, data_len);
|
||||
/* PERIPHERAL QUALIFIER(7-5) PERIPHERAL DEVICE TYPE(4-0) */
|
||||
buffer[0] = 0x03 << 5 | 0x1f;
|
||||
/* ADDITIONAL LENGTH */
|
||||
buffer[4] = data_len - 5;
|
||||
|
||||
allocation_len = from_be16(&task->cdb[3]);
|
||||
if (spdk_scsi_task_scatter_data(task, buffer, spdk_min(allocation_len, data_len)) >= 0) {
|
||||
task->data_transferred = data_len;
|
||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||
}
|
||||
} else {
|
||||
/* LOGICAL UNIT NOT SUPPORTED */
|
||||
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
|
||||
SPDK_SCSI_SENSE_ILLEGAL_REQUEST,
|
||||
SPDK_SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED,
|
||||
SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
|
||||
task->data_transferred = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_scsi_lun_execute_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task)
|
||||
{
|
||||
|
@ -254,3 +254,40 @@ spdk_scsi_task_copy_status(struct spdk_scsi_task *dst,
|
||||
dst->sense_data_len = src->sense_data_len;
|
||||
dst->status = src->status;
|
||||
}
|
||||
|
||||
void
|
||||
spdk_scsi_task_process_null_lun(struct spdk_scsi_task *task)
|
||||
{
|
||||
uint8_t buffer[36];
|
||||
uint32_t allocation_len;
|
||||
uint32_t data_len;
|
||||
|
||||
task->length = task->transfer_len;
|
||||
if (task->cdb[0] == SPDK_SPC_INQUIRY) {
|
||||
/*
|
||||
* SPC-4 states that INQUIRY commands to an unsupported LUN
|
||||
* must be served with PERIPHERAL QUALIFIER = 0x3 and
|
||||
* PERIPHERAL DEVICE TYPE = 0x1F.
|
||||
*/
|
||||
data_len = sizeof(buffer);
|
||||
|
||||
memset(buffer, 0, data_len);
|
||||
/* PERIPHERAL QUALIFIER(7-5) PERIPHERAL DEVICE TYPE(4-0) */
|
||||
buffer[0] = 0x03 << 5 | 0x1f;
|
||||
/* ADDITIONAL LENGTH */
|
||||
buffer[4] = data_len - 5;
|
||||
|
||||
allocation_len = from_be16(&task->cdb[3]);
|
||||
if (spdk_scsi_task_scatter_data(task, buffer, spdk_min(allocation_len, data_len)) >= 0) {
|
||||
task->data_transferred = data_len;
|
||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||
}
|
||||
} else {
|
||||
/* LOGICAL UNIT NOT SUPPORTED */
|
||||
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
|
||||
SPDK_SCSI_SENSE_ILLEGAL_REQUEST,
|
||||
SPDK_SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED,
|
||||
SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
|
||||
task->data_transferred = 0;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user