diff options
Diffstat (limited to 'drivers/scsi/libsas/sas_ata.c')
-rw-r--r-- | drivers/scsi/libsas/sas_ata.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c index 042153cbbde1..e1a395b438ee 100644 --- a/drivers/scsi/libsas/sas_ata.c +++ b/drivers/scsi/libsas/sas_ata.c | |||
@@ -162,6 +162,10 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc) | |||
162 | unsigned int xfer = 0; | 162 | unsigned int xfer = 0; |
163 | unsigned int si; | 163 | unsigned int si; |
164 | 164 | ||
165 | /* If the device fell off, no sense in issuing commands */ | ||
166 | if (dev->gone) | ||
167 | return AC_ERR_SYSTEM; | ||
168 | |||
165 | task = sas_alloc_task(GFP_ATOMIC); | 169 | task = sas_alloc_task(GFP_ATOMIC); |
166 | if (!task) | 170 | if (!task) |
167 | return AC_ERR_SYSTEM; | 171 | return AC_ERR_SYSTEM; |
@@ -347,6 +351,7 @@ static int sas_ata_scr_read(struct ata_link *link, unsigned int sc_reg_in, | |||
347 | static struct ata_port_operations sas_sata_ops = { | 351 | static struct ata_port_operations sas_sata_ops = { |
348 | .phy_reset = sas_ata_phy_reset, | 352 | .phy_reset = sas_ata_phy_reset, |
349 | .post_internal_cmd = sas_ata_post_internal, | 353 | .post_internal_cmd = sas_ata_post_internal, |
354 | .qc_defer = ata_std_qc_defer, | ||
350 | .qc_prep = ata_noop_qc_prep, | 355 | .qc_prep = ata_noop_qc_prep, |
351 | .qc_issue = sas_ata_qc_issue, | 356 | .qc_issue = sas_ata_qc_issue, |
352 | .qc_fill_rtf = sas_ata_qc_fill_rtf, | 357 | .qc_fill_rtf = sas_ata_qc_fill_rtf, |