diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-04-18 14:18:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 14:20:42 -0400 |
commit | 855d854a33fca71cf68bad258bd5e66e5b265d10 (patch) | |
tree | fcb5cac022d38af474c5243182a3c6f91de0b2ec /drivers | |
parent | e675349e2bdbfb661fa0d8ff2441b4cf48fb7e48 (diff) |
libata: fix boot panic with SATAPI devices on non-SFF HBAs
The kernel now panics reliably on boot if you have a SATAPI device
connected.
The problem was introduced by the libata merge trying to pull out all
the SFF code into a separate module. Unfortunately, if you're a satapi
device you usually need to call atapi_request_sense, which has a bare
invocation of a SFF callback which is NULL on non-SFF HBAs. Fix this by
making the call conditional.
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/libata-scsi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index fedf62de9460..c16e3cea1d28 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -2394,7 +2394,8 @@ static void atapi_request_sense(struct ata_queued_cmd *qc) | |||
2394 | memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); | 2394 | memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); |
2395 | 2395 | ||
2396 | #ifdef CONFIG_ATA_SFF | 2396 | #ifdef CONFIG_ATA_SFF |
2397 | ap->ops->sff_tf_read(ap, &qc->tf); | 2397 | if (ap->ops->sff_tf_read) |
2398 | ap->ops->sff_tf_read(ap, &qc->tf); | ||
2398 | #endif | 2399 | #endif |
2399 | 2400 | ||
2400 | /* fill these in, for the case where they are -not- overwritten */ | 2401 | /* fill these in, for the case where they are -not- overwritten */ |