aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/cciss_scsi.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
index d2eb48977410..3315268b4ec7 100644
--- a/drivers/block/cciss_scsi.c
+++ b/drivers/block/cciss_scsi.c
@@ -1604,16 +1604,25 @@ static int wait_for_device_to_become_ready(ctlr_info_t *h,
1604 1604
1605 (void) process_sendcmd_error(h, c); 1605 (void) process_sendcmd_error(h, c);
1606 1606
1607 if (rc == 0 && c->err_info->CommandStatus == CMD_SUCCESS) 1607 if (rc != 0)
1608 break; 1608 goto retry_tur;
1609 1609
1610 if (rc == 0 && 1610 if (c->err_info->CommandStatus == CMD_SUCCESS)
1611 c->err_info->CommandStatus == CMD_TARGET_STATUS &&
1612 c->err_info->ScsiStatus == SAM_STAT_CHECK_CONDITION &&
1613 (c->err_info->SenseInfo[2] == NO_SENSE ||
1614 c->err_info->SenseInfo[2] == UNIT_ATTENTION))
1615 break; 1611 break;
1616 1612
1613 if (c->err_info->CommandStatus == CMD_TARGET_STATUS &&
1614 c->err_info->ScsiStatus == SAM_STAT_CHECK_CONDITION) {
1615 if (c->err_info->SenseInfo[2] == NO_SENSE)
1616 break;
1617 if (c->err_info->SenseInfo[2] == UNIT_ATTENTION) {
1618 unsigned char asc;
1619 asc = c->err_info->SenseInfo[12];
1620 check_for_unit_attention(h, c);
1621 if (asc == POWER_OR_RESET)
1622 break;
1623 }
1624 }
1625retry_tur:
1617 printk(KERN_WARNING "cciss%d: Waiting %d secs " 1626 printk(KERN_WARNING "cciss%d: Waiting %d secs "
1618 "for device to become ready.\n", 1627 "for device to become ready.\n",
1619 h->ctlr, waittime / HZ); 1628 h->ctlr, waittime / HZ);