mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
scsi: acornscsi: Remove tagged queuing vestiges
The acornscsi driver has a config option to enable tagged queuing, but this option gets disabled in the driver itself with the comment 'needs to be debugged'. As this is a _really_ old driver I doubt anyone will be wanting to invest time here, so remove the tagged queue vestiges and make our lives easier. [jpg: Use scsi_cmd_to_rq()] Link: https://lore.kernel.org/r/1631696835-136198-3-git-send-email-john.garry@huawei.com Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: John Garry <john.garry@huawei.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
bc41fcbffd
commit
756fb6a895
@ -10,17 +10,6 @@ config SCSI_ACORNSCSI_3
|
|||||||
This enables support for the Acorn SCSI card (aka30). If you have an
|
This enables support for the Acorn SCSI card (aka30). If you have an
|
||||||
Acorn system with one of these, say Y. If unsure, say N.
|
Acorn system with one of these, say Y. If unsure, say N.
|
||||||
|
|
||||||
config SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
bool "Support SCSI 2 Tagged queueing"
|
|
||||||
depends on SCSI_ACORNSCSI_3
|
|
||||||
help
|
|
||||||
Say Y here to enable tagged queuing support on the Acorn SCSI card.
|
|
||||||
|
|
||||||
This is a feature of SCSI-2 which improves performance: the host
|
|
||||||
adapter can send several SCSI commands to a device's queue even if
|
|
||||||
previous commands haven't finished yet. Some SCSI devices don't
|
|
||||||
implement this properly, so the safe answer is N.
|
|
||||||
|
|
||||||
config SCSI_ACORNSCSI_SYNC
|
config SCSI_ACORNSCSI_SYNC
|
||||||
bool "Support SCSI 2 Synchronous Transfers"
|
bool "Support SCSI 2 Synchronous Transfers"
|
||||||
depends on SCSI_ACORNSCSI_3
|
depends on SCSI_ACORNSCSI_3
|
||||||
|
@ -52,12 +52,8 @@
|
|||||||
* You can tell if you have a device that supports tagged queueing my
|
* You can tell if you have a device that supports tagged queueing my
|
||||||
* cating (eg) /proc/scsi/acornscsi/0 and see if the SCSI revision is reported
|
* cating (eg) /proc/scsi/acornscsi/0 and see if the SCSI revision is reported
|
||||||
* as '2 TAG'.
|
* as '2 TAG'.
|
||||||
*
|
|
||||||
* Also note that CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE is normally set in the config
|
|
||||||
* scripts, but disabled here. Once debugged, remove the #undef, otherwise to debug,
|
|
||||||
* comment out the undef.
|
|
||||||
*/
|
*/
|
||||||
#undef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
/*
|
/*
|
||||||
* SCSI-II Synchronous transfer support.
|
* SCSI-II Synchronous transfer support.
|
||||||
*
|
*
|
||||||
@ -171,7 +167,7 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
|||||||
unsigned int result);
|
unsigned int result);
|
||||||
static int acornscsi_reconnect_finish(AS_Host *host);
|
static int acornscsi_reconnect_finish(AS_Host *host);
|
||||||
static void acornscsi_dma_cleanup(AS_Host *host);
|
static void acornscsi_dma_cleanup(AS_Host *host);
|
||||||
static void acornscsi_abortcmd(AS_Host *host, unsigned char tag);
|
static void acornscsi_abortcmd(AS_Host *host);
|
||||||
|
|
||||||
/* ====================================================================================
|
/* ====================================================================================
|
||||||
* Miscellaneous
|
* Miscellaneous
|
||||||
@ -741,17 +737,6 @@ intr_ret_t acornscsi_kick(AS_Host *host)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (from_queue) {
|
if (from_queue) {
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
/*
|
|
||||||
* tagged queueing - allocate a new tag to this command
|
|
||||||
*/
|
|
||||||
if (SCpnt->device->simple_tags) {
|
|
||||||
SCpnt->device->current_tag += 1;
|
|
||||||
if (SCpnt->device->current_tag == 0)
|
|
||||||
SCpnt->device->current_tag = 1;
|
|
||||||
SCpnt->tag = SCpnt->device->current_tag;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
set_bit(SCpnt->device->id * 8 +
|
set_bit(SCpnt->device->id * 8 +
|
||||||
(u8)(SCpnt->device->lun & 0x07), host->busyluns);
|
(u8)(SCpnt->device->lun & 0x07), host->busyluns);
|
||||||
|
|
||||||
@ -1192,7 +1177,7 @@ void acornscsi_dma_intr(AS_Host *host)
|
|||||||
* the device recognises the attention.
|
* the device recognises the attention.
|
||||||
*/
|
*/
|
||||||
if (dmac_read(host, DMAC_STATUS) & STATUS_RQ0) {
|
if (dmac_read(host, DMAC_STATUS) & STATUS_RQ0) {
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
|
|
||||||
dmac_write(host, DMAC_TXCNTLO, 0);
|
dmac_write(host, DMAC_TXCNTLO, 0);
|
||||||
dmac_write(host, DMAC_TXCNTHI, 0);
|
dmac_write(host, DMAC_TXCNTHI, 0);
|
||||||
@ -1560,23 +1545,6 @@ void acornscsi_message(AS_Host *host)
|
|||||||
acornscsi_sbic_issuecmd(host, CMND_ASSERTATN);
|
acornscsi_sbic_issuecmd(host, CMND_ASSERTATN);
|
||||||
|
|
||||||
switch (host->scsi.last_message) {
|
switch (host->scsi.last_message) {
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
case HEAD_OF_QUEUE_TAG:
|
|
||||||
case ORDERED_QUEUE_TAG:
|
|
||||||
case SIMPLE_QUEUE_TAG:
|
|
||||||
/*
|
|
||||||
* ANSI standard says: (Section SCSI-2 Rev. 10c Sect 5.6.17)
|
|
||||||
* If a target does not implement tagged queuing and a queue tag
|
|
||||||
* message is received, it shall respond with a MESSAGE REJECT
|
|
||||||
* message and accept the I/O process as if it were untagged.
|
|
||||||
*/
|
|
||||||
printk(KERN_NOTICE "scsi%d.%c: disabling tagged queueing\n",
|
|
||||||
host->host->host_no, acornscsi_target(host));
|
|
||||||
host->SCpnt->device->simple_tags = 0;
|
|
||||||
set_bit(host->SCpnt->device->id * 8 +
|
|
||||||
(u8)(host->SCpnt->device->lun & 0x7), host->busyluns);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case EXTENDED_MESSAGE | (EXTENDED_SDTR << 8):
|
case EXTENDED_MESSAGE | (EXTENDED_SDTR << 8):
|
||||||
/*
|
/*
|
||||||
* Target can't handle synchronous transfers
|
* Target can't handle synchronous transfers
|
||||||
@ -1687,24 +1655,11 @@ void acornscsi_buildmessages(AS_Host *host)
|
|||||||
#if 0
|
#if 0
|
||||||
/* does the device need the current command aborted */
|
/* does the device need the current command aborted */
|
||||||
if (cmd_aborted) {
|
if (cmd_aborted) {
|
||||||
acornscsi_abortcmd(host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
if (host->SCpnt->tag) {
|
|
||||||
unsigned int tag_type;
|
|
||||||
|
|
||||||
if (host->SCpnt->cmnd[0] == REQUEST_SENSE ||
|
|
||||||
host->SCpnt->cmnd[0] == TEST_UNIT_READY ||
|
|
||||||
host->SCpnt->cmnd[0] == INQUIRY)
|
|
||||||
tag_type = HEAD_OF_QUEUE_TAG;
|
|
||||||
else
|
|
||||||
tag_type = SIMPLE_QUEUE_TAG;
|
|
||||||
msgqueue_addmsg(&host->scsi.msgs, 2, tag_type, host->SCpnt->tag);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||||
if (host->device[host->SCpnt->device->id].sync_state == SYNC_NEGOCIATE) {
|
if (host->device[host->SCpnt->device->id].sync_state == SYNC_NEGOCIATE) {
|
||||||
@ -1798,7 +1753,7 @@ int acornscsi_reconnect(AS_Host *host)
|
|||||||
"to reconnect with\n",
|
"to reconnect with\n",
|
||||||
host->host->host_no, '0' + target);
|
host->host->host_no, '0' + target);
|
||||||
acornscsi_dumplog(host, target);
|
acornscsi_dumplog(host, target);
|
||||||
acornscsi_abortcmd(host, 0);
|
acornscsi_abortcmd(host);
|
||||||
if (host->SCpnt) {
|
if (host->SCpnt) {
|
||||||
queue_add_cmd_tail(&host->queues.disconnected, host->SCpnt);
|
queue_add_cmd_tail(&host->queues.disconnected, host->SCpnt);
|
||||||
host->SCpnt = NULL;
|
host->SCpnt = NULL;
|
||||||
@ -1821,7 +1776,7 @@ int acornscsi_reconnect_finish(AS_Host *host)
|
|||||||
host->scsi.disconnectable = 0;
|
host->scsi.disconnectable = 0;
|
||||||
if (host->SCpnt->device->id == host->scsi.reconnected.target &&
|
if (host->SCpnt->device->id == host->scsi.reconnected.target &&
|
||||||
host->SCpnt->device->lun == host->scsi.reconnected.lun &&
|
host->SCpnt->device->lun == host->scsi.reconnected.lun &&
|
||||||
host->SCpnt->tag == host->scsi.reconnected.tag) {
|
scsi_cmd_to_tag(host->SCpnt) == host->scsi.reconnected.tag) {
|
||||||
#if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
|
#if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
|
||||||
DBG(host->SCpnt, printk("scsi%d.%c: reconnected",
|
DBG(host->SCpnt, printk("scsi%d.%c: reconnected",
|
||||||
host->host->host_no, acornscsi_target(host)));
|
host->host->host_no, acornscsi_target(host)));
|
||||||
@ -1848,7 +1803,7 @@ int acornscsi_reconnect_finish(AS_Host *host)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!host->SCpnt)
|
if (!host->SCpnt)
|
||||||
acornscsi_abortcmd(host, host->scsi.reconnected.tag);
|
acornscsi_abortcmd(host);
|
||||||
else {
|
else {
|
||||||
/*
|
/*
|
||||||
* Restore data pointer from SAVED pointers.
|
* Restore data pointer from SAVED pointers.
|
||||||
@ -1889,20 +1844,14 @@ void acornscsi_disconnect_unexpected(AS_Host *host)
|
|||||||
* Function: void acornscsi_abortcmd(AS_host *host, unsigned char tag)
|
* Function: void acornscsi_abortcmd(AS_host *host, unsigned char tag)
|
||||||
* Purpose : abort a currently executing command
|
* Purpose : abort a currently executing command
|
||||||
* Params : host - host with connected command to abort
|
* Params : host - host with connected command to abort
|
||||||
* tag - tag to abort
|
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
void acornscsi_abortcmd(AS_Host *host, unsigned char tag)
|
void acornscsi_abortcmd(AS_Host *host)
|
||||||
{
|
{
|
||||||
host->scsi.phase = PHASE_ABORTED;
|
host->scsi.phase = PHASE_ABORTED;
|
||||||
sbic_arm_write(host, SBIC_CMND, CMND_ASSERTATN);
|
sbic_arm_write(host, SBIC_CMND, CMND_ASSERTATN);
|
||||||
|
|
||||||
msgqueue_flush(&host->scsi.msgs);
|
msgqueue_flush(&host->scsi.msgs);
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
if (tag)
|
|
||||||
msgqueue_addmsg(&host->scsi.msgs, 2, ABORT_TAG, tag);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
msgqueue_addmsg(&host->scsi.msgs, 1, ABORT);
|
msgqueue_addmsg(&host->scsi.msgs, 1, ABORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1993,7 +1942,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTING, SSR %02X?\n",
|
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTING, SSR %02X?\n",
|
||||||
host->host->host_no, acornscsi_target(host), ssr);
|
host->host->host_no, acornscsi_target(host), ssr);
|
||||||
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
}
|
}
|
||||||
return INTR_PROCESSING;
|
return INTR_PROCESSING;
|
||||||
|
|
||||||
@ -2029,7 +1978,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTED, SSR %02X?\n",
|
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTED, SSR %02X?\n",
|
||||||
host->host->host_no, acornscsi_target(host), ssr);
|
host->host->host_no, acornscsi_target(host), ssr);
|
||||||
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
}
|
}
|
||||||
return INTR_PROCESSING;
|
return INTR_PROCESSING;
|
||||||
|
|
||||||
@ -2075,20 +2024,20 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
case 0x18: /* -> PHASE_DATAOUT */
|
case 0x18: /* -> PHASE_DATAOUT */
|
||||||
/* COMMAND -> DATA OUT */
|
/* COMMAND -> DATA OUT */
|
||||||
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
acornscsi_dma_setup(host, DMA_OUT);
|
acornscsi_dma_setup(host, DMA_OUT);
|
||||||
if (!acornscsi_starttransfer(host))
|
if (!acornscsi_starttransfer(host))
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
host->scsi.phase = PHASE_DATAOUT;
|
host->scsi.phase = PHASE_DATAOUT;
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
case 0x19: /* -> PHASE_DATAIN */
|
case 0x19: /* -> PHASE_DATAIN */
|
||||||
/* COMMAND -> DATA IN */
|
/* COMMAND -> DATA IN */
|
||||||
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
acornscsi_dma_setup(host, DMA_IN);
|
acornscsi_dma_setup(host, DMA_IN);
|
||||||
if (!acornscsi_starttransfer(host))
|
if (!acornscsi_starttransfer(host))
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
host->scsi.phase = PHASE_DATAIN;
|
host->scsi.phase = PHASE_DATAIN;
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
@ -2156,7 +2105,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
/* MESSAGE IN -> DATA OUT */
|
/* MESSAGE IN -> DATA OUT */
|
||||||
acornscsi_dma_setup(host, DMA_OUT);
|
acornscsi_dma_setup(host, DMA_OUT);
|
||||||
if (!acornscsi_starttransfer(host))
|
if (!acornscsi_starttransfer(host))
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
host->scsi.phase = PHASE_DATAOUT;
|
host->scsi.phase = PHASE_DATAOUT;
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
@ -2165,7 +2114,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
/* MESSAGE IN -> DATA IN */
|
/* MESSAGE IN -> DATA IN */
|
||||||
acornscsi_dma_setup(host, DMA_IN);
|
acornscsi_dma_setup(host, DMA_IN);
|
||||||
if (!acornscsi_starttransfer(host))
|
if (!acornscsi_starttransfer(host))
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
host->scsi.phase = PHASE_DATAIN;
|
host->scsi.phase = PHASE_DATAIN;
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
@ -2206,7 +2155,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
switch (ssr) {
|
switch (ssr) {
|
||||||
case 0x19: /* -> PHASE_DATAIN */
|
case 0x19: /* -> PHASE_DATAIN */
|
||||||
case 0x89: /* -> PHASE_DATAIN */
|
case 0x89: /* -> PHASE_DATAIN */
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
case 0x1b: /* -> PHASE_STATUSIN */
|
case 0x1b: /* -> PHASE_STATUSIN */
|
||||||
@ -2255,7 +2204,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
|||||||
switch (ssr) {
|
switch (ssr) {
|
||||||
case 0x18: /* -> PHASE_DATAOUT */
|
case 0x18: /* -> PHASE_DATAOUT */
|
||||||
case 0x88: /* -> PHASE_DATAOUT */
|
case 0x88: /* -> PHASE_DATAOUT */
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
return INTR_IDLE;
|
return INTR_IDLE;
|
||||||
|
|
||||||
case 0x1b: /* -> PHASE_STATUSIN */
|
case 0x1b: /* -> PHASE_STATUSIN */
|
||||||
@ -2482,7 +2431,6 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
|
|||||||
SCpnt->scsi_done = done;
|
SCpnt->scsi_done = done;
|
||||||
SCpnt->host_scribble = NULL;
|
SCpnt->host_scribble = NULL;
|
||||||
SCpnt->result = 0;
|
SCpnt->result = 0;
|
||||||
SCpnt->tag = 0;
|
|
||||||
SCpnt->SCp.phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
|
SCpnt->SCp.phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
|
||||||
SCpnt->SCp.sent_command = 0;
|
SCpnt->SCp.sent_command = 0;
|
||||||
SCpnt->SCp.scsi_xferred = 0;
|
SCpnt->SCp.scsi_xferred = 0;
|
||||||
@ -2581,7 +2529,7 @@ static enum res_abort acornscsi_do_abort(AS_Host *host, struct scsi_cmnd *SCpnt)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
acornscsi_abortcmd(host);
|
||||||
res = res_snooze;
|
res = res_snooze;
|
||||||
}
|
}
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
@ -2747,9 +2695,6 @@ char *acornscsi_info(struct Scsi_Host *host)
|
|||||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||||
" SYNC"
|
" SYNC"
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
" TAG"
|
|
||||||
#endif
|
|
||||||
#if (DEBUG & DEBUG_NO_WRITE)
|
#if (DEBUG & DEBUG_NO_WRITE)
|
||||||
" NOWRITE (" __stringify(NO_WRITE) ")"
|
" NOWRITE (" __stringify(NO_WRITE) ")"
|
||||||
#endif
|
#endif
|
||||||
@ -2770,9 +2715,6 @@ static int acornscsi_show_info(struct seq_file *m, struct Scsi_Host *instance)
|
|||||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||||
" SYNC"
|
" SYNC"
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
|
||||||
" TAG"
|
|
||||||
#endif
|
|
||||||
#if (DEBUG & DEBUG_NO_WRITE)
|
#if (DEBUG & DEBUG_NO_WRITE)
|
||||||
" NOWRITE (" __stringify(NO_WRITE) ")"
|
" NOWRITE (" __stringify(NO_WRITE) ")"
|
||||||
#endif
|
#endif
|
||||||
@ -2827,9 +2769,8 @@ static int acornscsi_show_info(struct seq_file *m, struct Scsi_Host *instance)
|
|||||||
seq_printf(m, "Device/Lun TaggedQ Sync\n");
|
seq_printf(m, "Device/Lun TaggedQ Sync\n");
|
||||||
seq_printf(m, " %d/%llu ", scd->id, scd->lun);
|
seq_printf(m, " %d/%llu ", scd->id, scd->lun);
|
||||||
if (scd->tagged_supported)
|
if (scd->tagged_supported)
|
||||||
seq_printf(m, "%3sabled(%3d) ",
|
seq_printf(m, "%3sabled ",
|
||||||
scd->simple_tags ? "en" : "dis",
|
scd->simple_tags ? "en" : "dis");
|
||||||
scd->current_tag);
|
|
||||||
else
|
else
|
||||||
seq_printf(m, "unsupported ");
|
seq_printf(m, "unsupported ");
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ struct scsi_cmnd *queue_remove_tgtluntag(Queue_t *queue, int target, int lun,
|
|||||||
list_for_each(l, &queue->head) {
|
list_for_each(l, &queue->head) {
|
||||||
QE_t *q = list_entry(l, QE_t, list);
|
QE_t *q = list_entry(l, QE_t, list);
|
||||||
if (q->SCpnt->device->id == target && q->SCpnt->device->lun == lun &&
|
if (q->SCpnt->device->id == target && q->SCpnt->device->lun == lun &&
|
||||||
q->SCpnt->tag == tag) {
|
scsi_cmd_to_rq(q->SCpnt)->tag == tag) {
|
||||||
SCpnt = __queue_remove(queue, l);
|
SCpnt = __queue_remove(queue, l);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user