scsi: use 64-bit LUNs
The SCSI standard defines 64-bit values for LUNs, and large arrays employing large or hierarchical LUN numbers become more and more common. So update the linux SCSI stack to use 64-bit LUN numbers. Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Christoph Hellwig <hch@infradead.org> Reviewed-by: Ewan Milne <emilne@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
此提交包含在:
@@ -115,7 +115,7 @@ struct scb_platform_data;
|
||||
#endif
|
||||
|
||||
#define AHD_BUILD_COL_IDX(target, lun) \
|
||||
(((lun) << 4) | target)
|
||||
((((u8)lun) << 4) | target)
|
||||
|
||||
#define AHD_GET_SCB_COL_IDX(ahd, scb) \
|
||||
((SCB_GET_LUN(scb) << 4) | SCB_GET_TARGET(ahd, scb))
|
||||
|
@@ -2137,7 +2137,7 @@ ahd_linux_queue_cmd_complete(struct ahd_softc *ahd, struct scsi_cmnd *cmd)
|
||||
if (do_fallback) {
|
||||
printk("%s: device overrun (status %x) on %d:%d:%d\n",
|
||||
ahd_name(ahd), status, cmd->device->channel,
|
||||
cmd->device->id, cmd->device->lun);
|
||||
cmd->device->id, (u8)cmd->device->lun);
|
||||
}
|
||||
|
||||
ahd_cmd_set_transaction_status(cmd, new_status);
|
||||
@@ -2253,13 +2253,13 @@ ahd_linux_queue_abort_cmd(struct scsi_cmnd *cmd)
|
||||
disconnected = TRUE;
|
||||
if (ahd_search_qinfifo(ahd, cmd->device->id,
|
||||
cmd->device->channel + 'A',
|
||||
cmd->device->lun,
|
||||
cmd->device->lun,
|
||||
pending_scb->hscb->tag,
|
||||
ROLE_INITIATOR, CAM_REQ_ABORTED,
|
||||
SEARCH_COMPLETE) > 0) {
|
||||
printk("%s:%d:%d:%d: Cmd aborted from QINFIFO\n",
|
||||
ahd_name(ahd), cmd->device->channel,
|
||||
cmd->device->id, cmd->device->lun);
|
||||
cmd->device->id, (u8)cmd->device->lun);
|
||||
retval = SUCCESS;
|
||||
goto done;
|
||||
}
|
||||
|
@@ -197,7 +197,7 @@ ahd_dump_device_state(struct seq_file *m, struct scsi_device *sdev)
|
||||
|
||||
seq_printf(m, "\tChannel %c Target %d Lun %d Settings\n",
|
||||
sdev->sdev_target->channel + 'A',
|
||||
sdev->sdev_target->id, sdev->lun);
|
||||
sdev->sdev_target->id, (u8)sdev->lun);
|
||||
|
||||
seq_printf(m, "\t\tCommands Queued %ld\n", dev->commands_issued);
|
||||
seq_printf(m, "\t\tCommands Active %d\n", dev->active);
|
||||
|
@@ -2110,7 +2110,7 @@ ahc_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
|
||||
*/
|
||||
printk("%s:%d:%d:%d: Is not an active device\n",
|
||||
ahc_name(ahc), cmd->device->channel, cmd->device->id,
|
||||
cmd->device->lun);
|
||||
(u8)cmd->device->lun);
|
||||
retval = SUCCESS;
|
||||
goto no_cmd;
|
||||
}
|
||||
@@ -2118,11 +2118,11 @@ ahc_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
|
||||
if ((dev->flags & (AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED)) == 0
|
||||
&& ahc_search_untagged_queues(ahc, cmd, cmd->device->id,
|
||||
cmd->device->channel + 'A',
|
||||
cmd->device->lun,
|
||||
(u8)cmd->device->lun,
|
||||
CAM_REQ_ABORTED, SEARCH_COMPLETE) != 0) {
|
||||
printk("%s:%d:%d:%d: Command found on untagged queue\n",
|
||||
ahc_name(ahc), cmd->device->channel, cmd->device->id,
|
||||
cmd->device->lun);
|
||||
(u8)cmd->device->lun);
|
||||
retval = SUCCESS;
|
||||
goto done;
|
||||
}
|
||||
@@ -2188,13 +2188,14 @@ ahc_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
|
||||
SEARCH_COMPLETE) > 0) {
|
||||
printk("%s:%d:%d:%d: Cmd aborted from QINFIFO\n",
|
||||
ahc_name(ahc), cmd->device->channel,
|
||||
cmd->device->id, cmd->device->lun);
|
||||
cmd->device->id, (u8)cmd->device->lun);
|
||||
retval = SUCCESS;
|
||||
goto done;
|
||||
}
|
||||
} else if (ahc_search_qinfifo(ahc, cmd->device->id,
|
||||
cmd->device->channel + 'A',
|
||||
cmd->device->lun, pending_scb->hscb->tag,
|
||||
cmd->device->lun,
|
||||
pending_scb->hscb->tag,
|
||||
ROLE_INITIATOR, /*status*/0,
|
||||
SEARCH_COUNT) > 0) {
|
||||
disconnected = FALSE;
|
||||
|
@@ -175,7 +175,7 @@ ahc_dump_device_state(struct seq_file *m, struct scsi_device *sdev)
|
||||
|
||||
seq_printf(m, "\tChannel %c Target %d Lun %d Settings\n",
|
||||
sdev->sdev_target->channel + 'A',
|
||||
sdev->sdev_target->id, sdev->lun);
|
||||
sdev->sdev_target->id, (u8)sdev->lun);
|
||||
|
||||
seq_printf(m, "\t\tCommands Queued %ld\n", dev->commands_issued);
|
||||
seq_printf(m, "\t\tCommands Active %d\n", dev->active);
|
||||
|
新增問題並參考
封鎖使用者