[PATCH] fix id computation in scsi_eh_target_reset()

Hillf Danton
2010-10-14T14:04:28Z

There seems that the id of the tgtr_scmd processed by
scsi_try_target_reset() does not match the id in case that
SUCCESS is returned by scsi_try_target_reset().

The mismatch is fixed, and the loop to find the next highest
is also simplified.

Signed-off-by: Hillf Danton <dhillf@gmail.com>
---

--- a/drivers/scsi/scsi_error.c 2010-09-13 07:07:38.000000000 +0800
+++ b/drivers/scsi/scsi_error.c 2010-10-14 21:45:56.000000000 +0800
@@ -1173,14 +1173,19 @@ static int scsi_eh_target_reset(struct S
list_for_each_entry(scmd, work_q, eh_entry) {
if (scmd_id(scmd) > id &&
(!tgtr_scmd ||
- scmd_id(tgtr_scmd) > scmd_id(scmd)))
+ scmd_id(tgtr_scmd) > scmd_id(scmd))) {
tgtr_scmd = scmd;
+ if (1 + id == scmd_id(scmd))
+ break;
+ }
}
}
if (!tgtr_scmd)
/* no more commands, that's it */
break;

+ id = scmd_id(tgtr_scmd);
+
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending target reset "
"to target %d\n",
current->comm, id));