Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 226751
b: refs/heads/master
c: 98db519
h: refs/heads/master
i:
  226749: d137f81
  226747: cbc1170
  226743: 827f11a
  226735: 8bb7421
  226719: 8eafdf8
  226687: 9759ab0
v: v3
  • Loading branch information
James Bottomley authored and James Bottomley committed Dec 21, 2010
1 parent d2879e3 commit 547ca67
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 37 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: 110def851fc823bb1a4584cb6308e30e5ffb3e05
refs/heads/master: 98db519573e805f9f7e988fb5661da951fcb16b1
61 changes: 25 additions & 36 deletions trunk/drivers/scsi/scsi_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -1124,51 +1124,40 @@ static int scsi_eh_target_reset(struct Scsi_Host *shost,
struct list_head *work_q,
struct list_head *done_q)
{
struct scsi_cmnd *scmd, *tgtr_scmd, *next;
unsigned int id = 0;
int rtn;
LIST_HEAD(tmp_list);

do {
tgtr_scmd = NULL;
list_for_each_entry(scmd, work_q, eh_entry) {
if (id == scmd_id(scmd)) {
tgtr_scmd = scmd;
break;
}
}
if (!tgtr_scmd) {
/* not one exactly equal; find the next highest */
list_for_each_entry(scmd, work_q, eh_entry) {
if (scmd_id(scmd) > id &&
(!tgtr_scmd ||
scmd_id(tgtr_scmd) > scmd_id(scmd)))
tgtr_scmd = scmd;
}
}
if (!tgtr_scmd)
/* no more commands, that's it */
break;
list_splice_init(work_q, &tmp_list);

while (!list_empty(&tmp_list)) {
struct scsi_cmnd *next, *scmd;
int rtn;
unsigned int id;

scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry);
id = scmd_id(scmd);

SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending target reset "
"to target %d\n",
current->comm, id));
rtn = scsi_try_target_reset(tgtr_scmd);
if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
if (id == scmd_id(scmd))
if (!scsi_device_online(scmd->device) ||
rtn == FAST_IO_FAIL ||
!scsi_eh_tur(tgtr_scmd))
scsi_eh_finish_cmd(scmd,
done_q);
}
} else
rtn = scsi_try_target_reset(scmd);
if (rtn != SUCCESS && rtn != FAST_IO_FAIL)
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Target reset"
" failed target: "
"%d\n",
current->comm, id));
id++;
} while(id != 0);
list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) {
if (scmd_id(scmd) != id)
continue;

if ((rtn == SUCCESS || rtn == FAST_IO_FAIL)
&& (!scsi_device_online(scmd->device) ||
rtn == FAST_IO_FAIL || !scsi_eh_tur(scmd)))
scsi_eh_finish_cmd(scmd, done_q);
else
/* push back on work queue for further processing */
list_move(&scmd->eh_entry, work_q);
}
}

return list_empty(work_q);
}
Expand Down

0 comments on commit 547ca67

Please sign in to comment.