forked from luck/tmp_suning_uos_patched
scsi: aacraid: use scsi_host_busy_iter() to wait for outstanding commands
Instead of traversing the list of possible commands by hands we should be using scsi_host_busy_iter() to figure out if there are outstanding commands. Link: https://lore.kernel.org/r/20200228075318.91255-12-hare@suse.de Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Balsundar P < Balsundar.P@microchip.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
dcece99e86
commit
f4a0c9dbc6
|
@ -272,36 +272,35 @@ static void aac_queue_init(struct aac_dev * dev, struct aac_queue * q, u32 *mem,
|
|||
q->entries = qsize;
|
||||
}
|
||||
|
||||
static bool wait_for_io_iter(struct scsi_cmnd *cmd, void *data, bool rsvd)
|
||||
{
|
||||
int *active = data;
|
||||
|
||||
if (cmd->SCp.phase == AAC_OWNER_FIRMWARE)
|
||||
*active = *active + 1;
|
||||
return true;
|
||||
}
|
||||
static void aac_wait_for_io_completion(struct aac_dev *aac)
|
||||
{
|
||||
unsigned long flagv = 0;
|
||||
int i = 0;
|
||||
int i = 0, active;
|
||||
|
||||
for (i = 60; i; --i) {
|
||||
struct scsi_device *dev;
|
||||
struct scsi_cmnd *command;
|
||||
int active = 0;
|
||||
|
||||
__shost_for_each_device(dev, aac->scsi_host_ptr) {
|
||||
spin_lock_irqsave(&dev->list_lock, flagv);
|
||||
list_for_each_entry(command, &dev->cmd_list, list) {
|
||||
if (command->SCp.phase == AAC_OWNER_FIRMWARE) {
|
||||
active++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->list_lock, flagv);
|
||||
if (active)
|
||||
break;
|
||||
|
||||
}
|
||||
active = 0;
|
||||
scsi_host_busy_iter(aac->scsi_host_ptr,
|
||||
wait_for_io_iter, &active);
|
||||
/*
|
||||
* We can exit If all the commands are complete
|
||||
*/
|
||||
if (active == 0)
|
||||
break;
|
||||
dev_info(&aac->pdev->dev,
|
||||
"Wait for %d commands to complete\n", active);
|
||||
ssleep(1);
|
||||
}
|
||||
if (active)
|
||||
dev_err(&aac->pdev->dev,
|
||||
"%d outstanding commands during shutdown\n", active);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user