summaryrefslogtreecommitdiff |
diff options
author | Jeff Mahoney <jeffm@suse.com> | 2011-01-21 18:40:16 -0500 |
---|---|---|
committer | Jeff Mahoney <jeffm@suse.com> | 2011-01-21 18:41:44 -0500 |
commit | 6a740834b50638d7e819eec0978067eaf4e4f7f0 (patch) | |
tree | eeba3aac4d811f53baa020da0321023d86828148 | |
parent | c51aa475f3f7c8e8f6e427800f48a77af4ebcd21 (diff) |
- ata: Fix panics with ata_id (bnc#660464).rpm-2.6.37-20--openSUSE-11.4-RC1rpm-2.6.37-20--openSUSE-11.4-Milestone6rpm-2.6.37-20
suse-commit: fa7af15525aa80c8d9c1b092a98b348c11df390e
-rw-r--r-- | drivers/ata/libata-scsi.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 66aa4bee80a6..c4bdcd2bfb96 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -1102,9 +1102,9 @@ static int ata_scsi_dev_config(struct scsi_device *sdev, struct request_queue *q = sdev->request_queue; void *buf; - /* set the min alignment and padding */ - blk_queue_update_dma_alignment(sdev->request_queue, - ATA_DMA_PAD_SZ - 1); + sdev->sector_size = ATA_SECT_SIZE; + + /* set DMA padding */ blk_queue_update_dma_pad(sdev->request_queue, ATA_DMA_PAD_SZ - 1); @@ -1118,13 +1118,18 @@ static int ata_scsi_dev_config(struct scsi_device *sdev, blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN); } else { - /* ATA devices must be sector aligned */ sdev->sector_size = ata_id_logical_sector_size(dev->id); - blk_queue_update_dma_alignment(sdev->request_queue, - sdev->sector_size - 1); sdev->manage_start_stop = 1; } + /* + * ata_pio_sectors() expect sector alignment on buffers. ATAPI + * devices also need the alignment as IDENTIFY_PACKET is executed + * as ATA_PROT_PIO. + */ + blk_queue_update_dma_alignment(sdev->request_queue, + sdev->sector_size - 1); + if (dev->flags & ATA_DFLAG_AN) set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events); |