ALT Linux Bugzilla
– Attachment 4794 Details for
Bug 25055
2.6.32-el-smp-alt13 падает при запуске udevd
New bug
|
Search
|
[?]
|
Help
Register
|
Log In
[x]
|
Forgot Password
Login:
[x]
|
EN
|
RU
[patch]
backport of 729a6a30 commit
backport-729a6a30.patch (text/plain), 2.78 KB, created by
aspsk
on 2011-02-09 16:04:49 MSK
(
hide
)
Description:
backport of 729a6a30 commit
Filename:
MIME Type:
Creator:
aspsk
Created:
2011-02-09 16:04:49 MSK
Size:
2.78 KB
patch
obsolete
>commit 77285121573198280db62ac2bfa79bed7ce09eca >Author: Anton Protopopov <aspsk@altlinux.org> >Date: Wed Feb 9 15:55:08 2011 +0300 > > Backport 729a6a300e628a48cf12bac93a964a535e83cd1d > >diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c >index 6f6621a..377fdf5 100644 >--- a/drivers/ata/libata-scsi.c >+++ b/drivers/ata/libata-scsi.c >@@ -1104,9 +1104,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); > >@@ -1120,12 +1120,25 @@ 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 */ >- blk_queue_update_dma_alignment(sdev->request_queue, >- ATA_SECT_SIZE - 1); >+ sdev->sector_size = ata_id_logical_sector_size(dev->id); > sdev->manage_start_stop = 1; > } > >+ /* >+ * ata_pio_sectors() expects buffer for each sector to not cross >+ * page boundary. Enforce it by requiring buffers to be sector >+ * aligned, which works iff sector_size is not larger than >+ * PAGE_SIZE. ATAPI devices also need the alignment as >+ * IDENTIFY_PACKET is executed as ATA_PROT_PIO. >+ */ >+ if (sdev->sector_size > PAGE_SIZE) >+ ata_dev_printk(dev, KERN_WARNING, >+ "sector_size=%u > PAGE_SIZE, PIO may malfunction\n", >+ sdev->sector_size); >+ >+ 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); > >diff --git a/include/linux/ata.h b/include/linux/ata.h >index f8bd0f9..6e150c2 100644 >--- a/include/linux/ata.h >+++ b/include/linux/ata.h >@@ -89,6 +89,7 @@ enum { > ATA_ID_SPG = 98, > ATA_ID_LBA_CAPACITY_2 = 100, > ATA_ID_SECTOR_SIZE = 106, >+ ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */ > ATA_ID_LAST_LUN = 126, > ATA_ID_DLF = 128, > ATA_ID_CSFO = 129, >@@ -640,6 +641,18 @@ static inline int ata_id_flush_ext_enabled(const u16 *id) > return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; > } > >+static inline u32 ata_id_logical_sector_size(const u16 *id) >+{ >+ /* T13/1699-D Revision 6a, Sep 6, 2008. Page 128. >+ * IDENTIFY DEVICE data, word 117-118. >+ * 0xd000 ignores bit 13 (logical:physical > 1) >+ */ >+ if ((id[ATA_ID_SECTOR_SIZE] & 0xd000) == 0x5000) >+ return (((id[ATA_ID_LOGICAL_SECTOR_SIZE+1] << 16) >+ + id[ATA_ID_LOGICAL_SECTOR_SIZE]) * sizeof(u16)) ; >+ return ATA_SECT_SIZE; >+} >+ > static inline int ata_id_has_large_logical_sectors(const u16 *id) > { > if ((id[ATA_ID_SECTOR_SIZE] & 0xc000) != 0x4000)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 25055
:
4790
| 4794