Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 293015
b: refs/heads/master
c: 45c73b6
h: refs/heads/master
i:
  293013: c753c13
  293011: 0147301
  293007: 6de19a4
v: v3
  • Loading branch information
Dan Williams authored and James Bottomley committed Feb 29, 2012
1 parent 25bc419 commit fd5c2c7
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5a998328296cb16cb8b0307a402a0f2feab533c5
refs/heads/master: 45c73b65194173e77030d5b95abe5b63a402d268
25 changes: 16 additions & 9 deletions trunk/drivers/scsi/libsas/sas_scsi_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,8 @@ int sas_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)

static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
{
struct sas_task *task = TO_SAS_TASK(cmd);
struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(cmd->device->host);
struct sas_task *task = TO_SAS_TASK(cmd);

/* At this point, we only get called following an actual abort
* of the task, so we should be guaranteed not to be racing with
Expand All @@ -267,9 +267,9 @@ static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)

static void sas_eh_defer_cmd(struct scsi_cmnd *cmd)
{
struct sas_task *task = TO_SAS_TASK(cmd);
struct domain_device *dev = task->dev;
struct domain_device *dev = cmd_to_domain_dev(cmd);
struct sas_ha_struct *ha = dev->port->ha;
struct sas_task *task = TO_SAS_TASK(cmd);

if (!dev_is_sata(dev)) {
sas_eh_finish_cmd(cmd);
Expand Down Expand Up @@ -530,8 +530,9 @@ static int sas_eh_handle_sas_errors(struct Scsi_Host *shost,
struct sas_internal *i = to_sas_internal(shost->transportt);
unsigned long flags;
struct sas_ha_struct *ha = SHOST_TO_SAS_HA(shost);
LIST_HEAD(done);

Again:
/* clean out any commands that won the completion vs eh race */
list_for_each_entry_safe(cmd, n, work_q, eh_entry) {
struct domain_device *dev = cmd_to_domain_dev(cmd);
struct sas_task *task;
Expand All @@ -545,7 +546,12 @@ static int sas_eh_handle_sas_errors(struct Scsi_Host *shost,
spin_unlock_irqrestore(&dev->done_lock, flags);

if (!task)
continue;
list_move_tail(&cmd->eh_entry, &done);
}

Again:
list_for_each_entry_safe(cmd, n, work_q, eh_entry) {
struct sas_task *task = TO_SAS_TASK(cmd);

list_del_init(&cmd->eh_entry);

Expand Down Expand Up @@ -649,15 +655,16 @@ static int sas_eh_handle_sas_errors(struct Scsi_Host *shost,
goto clear_q;
}
}
out:
list_splice_tail(&done, work_q);
list_splice_tail_init(&ha->eh_ata_q, work_q);
return list_empty(work_q);
clear_q:

clear_q:
SAS_DPRINTK("--- Exit %s -- clear_q\n", __func__);
list_for_each_entry_safe(cmd, n, work_q, eh_entry)
sas_eh_finish_cmd(cmd);

list_splice_tail_init(&ha->eh_ata_q, work_q);
return list_empty(work_q);
goto out;
}

void sas_scsi_recover_host(struct Scsi_Host *shost)
Expand Down

0 comments on commit fd5c2c7

Please sign in to comment.