|
@@ -361,17 +361,18 @@ static void __init init_tags(void)
|
|
|
|
|
|
static int is_lun_busy(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
{
|
|
|
+ u8 lun = cmd->device->lun;
|
|
|
SETUP_HOSTDATA(cmd->device->host);
|
|
|
|
|
|
- if (hostdata->busy[cmd->device->id] & (1 << cmd->device->lun))
|
|
|
+ if (hostdata->busy[cmd->device->id] & (1 << lun))
|
|
|
return 1;
|
|
|
if (!should_be_tagged ||
|
|
|
!setup_use_tagged_queuing || !cmd->device->tagged_supported)
|
|
|
return 0;
|
|
|
- if (TagAlloc[cmd->device->id][cmd->device->lun].nr_allocated >=
|
|
|
- TagAlloc[cmd->device->id][cmd->device->lun].queue_size) {
|
|
|
+ if (TagAlloc[cmd->device->id][lun].nr_allocated >=
|
|
|
+ TagAlloc[cmd->device->id][lun].queue_size) {
|
|
|
dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d: no free tags\n",
|
|
|
- H_NO(cmd), cmd->device->id, cmd->device->lun);
|
|
|
+ H_NO(cmd), cmd->device->id, lun);
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
@@ -385,6 +386,7 @@ static int is_lun_busy(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
|
|
|
static void cmd_get_tag(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
{
|
|
|
+ u8 lun = cmd->device->lun;
|
|
|
SETUP_HOSTDATA(cmd->device->host);
|
|
|
|
|
|
/* If we or the target don't support tagged queuing, allocate the LUN for
|
|
@@ -393,11 +395,11 @@ static void cmd_get_tag(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
if (!should_be_tagged ||
|
|
|
!setup_use_tagged_queuing || !cmd->device->tagged_supported) {
|
|
|
cmd->tag = TAG_NONE;
|
|
|
- hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun);
|
|
|
+ hostdata->busy[cmd->device->id] |= (1 << lun);
|
|
|
dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d now allocated by untagged "
|
|
|
- "command\n", H_NO(cmd), cmd->device->id, cmd->device->lun);
|
|
|
+ "command\n", H_NO(cmd), cmd->device->id, lun);
|
|
|
} else {
|
|
|
- TAG_ALLOC *ta = &TagAlloc[cmd->device->id][cmd->device->lun];
|
|
|
+ TAG_ALLOC *ta = &TagAlloc[cmd->device->id][lun];
|
|
|
|
|
|
cmd->tag = find_first_zero_bit(ta->allocated, MAX_TAGS);
|
|
|
set_bit(cmd->tag, ta->allocated);
|
|
@@ -405,7 +407,7 @@ static void cmd_get_tag(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
dprintk(NDEBUG_TAGS, "scsi%d: using tag %d for target %d lun %d "
|
|
|
"(now %d tags in use)\n",
|
|
|
H_NO(cmd), cmd->tag, cmd->device->id,
|
|
|
- cmd->device->lun, ta->nr_allocated);
|
|
|
+ lun, ta->nr_allocated);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -416,21 +418,22 @@ static void cmd_get_tag(Scsi_Cmnd *cmd, int should_be_tagged)
|
|
|
|
|
|
static void cmd_free_tag(Scsi_Cmnd *cmd)
|
|
|
{
|
|
|
+ u8 lun = cmd->device->lun;
|
|
|
SETUP_HOSTDATA(cmd->device->host);
|
|
|
|
|
|
if (cmd->tag == TAG_NONE) {
|
|
|
- hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun);
|
|
|
+ hostdata->busy[cmd->device->id] &= ~(1 << lun);
|
|
|
dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d untagged cmd finished\n",
|
|
|
- H_NO(cmd), cmd->device->id, cmd->device->lun);
|
|
|
+ H_NO(cmd), cmd->device->id, lun);
|
|
|
} else if (cmd->tag >= MAX_TAGS) {
|
|
|
printk(KERN_NOTICE "scsi%d: trying to free bad tag %d!\n",
|
|
|
H_NO(cmd), cmd->tag);
|
|
|
} else {
|
|
|
- TAG_ALLOC *ta = &TagAlloc[cmd->device->id][cmd->device->lun];
|
|
|
+ TAG_ALLOC *ta = &TagAlloc[cmd->device->id][lun];
|
|
|
clear_bit(cmd->tag, ta->allocated);
|
|
|
ta->nr_allocated--;
|
|
|
dprintk(NDEBUG_TAGS, "scsi%d: freed tag %d for target %d lun %d\n",
|
|
|
- H_NO(cmd), cmd->tag, cmd->device->id, cmd->device->lun);
|
|
|
+ H_NO(cmd), cmd->tag, cmd->device->id, lun);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -713,7 +716,7 @@ static void lprint_Scsi_Cmnd(Scsi_Cmnd *cmd)
|
|
|
{
|
|
|
int i, s;
|
|
|
unsigned char *command;
|
|
|
- printk("scsi%d: destination target %d, lun %d\n",
|
|
|
+ printk("scsi%d: destination target %d, lun %llu\n",
|
|
|
H_NO(cmd), cmd->device->id, cmd->device->lun);
|
|
|
printk(KERN_CONT " command = ");
|
|
|
command = cmd->cmnd;
|
|
@@ -759,7 +762,7 @@ static void show_Scsi_Cmnd(Scsi_Cmnd *cmd, struct seq_file *m)
|
|
|
{
|
|
|
int i, s;
|
|
|
unsigned char *command;
|
|
|
- seq_printf(m, "scsi%d: destination target %d, lun %d\n",
|
|
|
+ seq_printf(m, "scsi%d: destination target %d, lun %llu\n",
|
|
|
H_NO(cmd), cmd->device->id, cmd->device->lun);
|
|
|
seq_printf(m, " command = ");
|
|
|
command = cmd->cmnd;
|
|
@@ -1060,12 +1063,13 @@ static void NCR5380_main(struct work_struct *work)
|
|
|
#endif
|
|
|
for (tmp = (Scsi_Cmnd *) hostdata->issue_queue,
|
|
|
prev = NULL; tmp; prev = tmp, tmp = NEXT(tmp)) {
|
|
|
+ u8 lun = tmp->device->lun;
|
|
|
|
|
|
#if (NDEBUG & NDEBUG_LISTS)
|
|
|
if (prev != tmp)
|
|
|
- printk("MAIN tmp=%p target=%d busy=%d lun=%d\n",
|
|
|
+ printk("MAIN tmp=%p target=%d busy=%d lun=%llu\n",
|
|
|
tmp, tmp->device->id, hostdata->busy[tmp->device->id],
|
|
|
- tmp->device->lun);
|
|
|
+ lun);
|
|
|
#endif
|
|
|
/* When we find one, remove it from the issue queue. */
|
|
|
/* ++guenther: possible race with Falcon locking */
|
|
@@ -1073,7 +1077,7 @@ static void NCR5380_main(struct work_struct *work)
|
|
|
#ifdef SUPPORT_TAGS
|
|
|
!is_lun_busy( tmp, tmp->cmnd[0] != REQUEST_SENSE)
|
|
|
#else
|
|
|
- !(hostdata->busy[tmp->device->id] & (1 << tmp->device->lun))
|
|
|
+ !(hostdata->busy[tmp->device->id] & (1 << lun))
|
|
|
#endif
|
|
|
) {
|
|
|
/* ++guenther: just to be sure, this must be atomic */
|
|
@@ -1099,7 +1103,7 @@ static void NCR5380_main(struct work_struct *work)
|
|
|
*/
|
|
|
dprintk(NDEBUG_MAIN, "scsi%d: main(): command for target %d "
|
|
|
"lun %d removed from issue_queue\n",
|
|
|
- HOSTNO, tmp->device->id, tmp->device->lun);
|
|
|
+ HOSTNO, tmp->device->id, lun);
|
|
|
/*
|
|
|
* REQUEST SENSE commands are issued without tagged
|
|
|
* queueing, even on SCSI-II devices because the
|
|
@@ -2061,7 +2065,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
* accesses to this device will use the
|
|
|
* polled-IO. */
|
|
|
printk(KERN_NOTICE "scsi%d: switching target %d "
|
|
|
- "lun %d to slow handshake\n", HOSTNO,
|
|
|
+ "lun %llu to slow handshake\n", HOSTNO,
|
|
|
cmd->device->id, cmd->device->lun);
|
|
|
cmd->device->borken = 1;
|
|
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE |
|
|
@@ -2113,7 +2117,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
/* Accept message by clearing ACK */
|
|
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
|
|
|
|
|
- dprintk(NDEBUG_LINKED, "scsi%d: target %d lun %d linked command "
|
|
|
+ dprintk(NDEBUG_LINKED, "scsi%d: target %d lun %llu linked command "
|
|
|
"complete.\n", HOSTNO, cmd->device->id, cmd->device->lun);
|
|
|
|
|
|
/* Enable reselect interrupts */
|
|
@@ -2125,7 +2129,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
*/
|
|
|
|
|
|
if (!cmd->next_link) {
|
|
|
- printk(KERN_NOTICE "scsi%d: target %d lun %d "
|
|
|
+ printk(KERN_NOTICE "scsi%d: target %d lun %llu "
|
|
|
"linked command complete, no next_link\n",
|
|
|
HOSTNO, cmd->device->id, cmd->device->lun);
|
|
|
sink = 1;
|
|
@@ -2138,7 +2142,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
* and don't free it! */
|
|
|
cmd->next_link->tag = cmd->tag;
|
|
|
cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
|
|
|
- dprintk(NDEBUG_LINKED, "scsi%d: target %d lun %d linked request "
|
|
|
+ dprintk(NDEBUG_LINKED, "scsi%d: target %d lun %llu linked request "
|
|
|
"done, calling scsi_done().\n",
|
|
|
HOSTNO, cmd->device->id, cmd->device->lun);
|
|
|
#ifdef NCR5380_STATS
|
|
@@ -2155,7 +2159,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
/* ++guenther: possible race with Falcon locking */
|
|
|
falcon_dont_release++;
|
|
|
hostdata->connected = NULL;
|
|
|
- dprintk(NDEBUG_QUEUES, "scsi%d: command for target %d, lun %d "
|
|
|
+ dprintk(NDEBUG_QUEUES, "scsi%d: command for target %d, lun %llu "
|
|
|
"completed\n", HOSTNO, cmd->device->id, cmd->device->lun);
|
|
|
#ifdef SUPPORT_TAGS
|
|
|
cmd_free_tag(cmd);
|
|
@@ -2169,7 +2173,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
/* ++Andreas: the mid level code knows about
|
|
|
QUEUE_FULL now. */
|
|
|
TAG_ALLOC *ta = &TagAlloc[cmd->device->id][cmd->device->lun];
|
|
|
- dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d returned "
|
|
|
+ dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %llu returned "
|
|
|
"QUEUE_FULL after %d commands\n",
|
|
|
HOSTNO, cmd->device->id, cmd->device->lun,
|
|
|
ta->nr_allocated);
|
|
@@ -2267,7 +2271,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
cmd->device->tagged_supported = 0;
|
|
|
hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun);
|
|
|
cmd->tag = TAG_NONE;
|
|
|
- dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %d rejected "
|
|
|
+ dprintk(NDEBUG_TAGS, "scsi%d: target %d lun %llu rejected "
|
|
|
"QUEUE_TAG message; tagged queuing "
|
|
|
"disabled\n",
|
|
|
HOSTNO, cmd->device->id, cmd->device->lun);
|
|
@@ -2284,7 +2288,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
hostdata->connected = NULL;
|
|
|
hostdata->disconnected_queue = cmd;
|
|
|
local_irq_restore(flags);
|
|
|
- dprintk(NDEBUG_QUEUES, "scsi%d: command for target %d lun %d was "
|
|
|
+ dprintk(NDEBUG_QUEUES, "scsi%d: command for target %d lun %llu was "
|
|
|
"moved from connected to the "
|
|
|
"disconnected_queue\n", HOSTNO,
|
|
|
cmd->device->id, cmd->device->lun);
|
|
@@ -2385,12 +2389,12 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
|
|
|
printk("\n");
|
|
|
} else if (tmp != EXTENDED_MESSAGE)
|
|
|
printk(KERN_DEBUG "scsi%d: rejecting unknown "
|
|
|
- "message %02x from target %d, lun %d\n",
|
|
|
+ "message %02x from target %d, lun %llu\n",
|
|
|
HOSTNO, tmp, cmd->device->id, cmd->device->lun);
|
|
|
else
|
|
|
printk(KERN_DEBUG "scsi%d: rejecting unknown "
|
|
|
"extended message "
|
|
|
- "code %02x, length %d from target %d, lun %d\n",
|
|
|
+ "code %02x, length %d from target %d, lun %llu\n",
|
|
|
HOSTNO, extended_msg[1], extended_msg[0],
|
|
|
cmd->device->id, cmd->device->lun);
|
|
|
|
|
@@ -2588,7 +2592,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance)
|
|
|
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
|
|
|
|
|
hostdata->connected = tmp;
|
|
|
- dprintk(NDEBUG_RESELECTION, "scsi%d: nexus established, target = %d, lun = %d, tag = %d\n",
|
|
|
+ dprintk(NDEBUG_RESELECTION, "scsi%d: nexus established, target = %d, lun = %llu, tag = %d\n",
|
|
|
HOSTNO, tmp->device->id, tmp->device->lun, tmp->tag);
|
|
|
falcon_dont_release--;
|
|
|
}
|