提交 a6cce2a7 编写于 作者: B Brian King 提交者: Jeff Garzik

[PATCH] libata: ata_scsi_slave_config cleanup

Encapsulate some of ata_scsi_slave_config so that parts
can be reused in future SAS patches.
Signed-off-by: NBrian King <brking@us.ibm.com>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 e46834cd
...@@ -662,6 +662,41 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc) ...@@ -662,6 +662,41 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
} }
} }
static void ata_scsi_sdev_config(struct scsi_device *sdev)
{
sdev->use_10_for_rw = 1;
sdev->use_10_for_ms = 1;
}
static void ata_scsi_dev_config(struct scsi_device *sdev,
struct ata_device *dev)
{
unsigned int max_sectors;
/* TODO: 2048 is an arbitrary number, not the
* hardware maximum. This should be increased to
* 65534 when Jens Axboe's patch for dynamically
* determining max_sectors is merged.
*/
max_sectors = ATA_MAX_SECTORS;
if (dev->flags & ATA_DFLAG_LBA48)
max_sectors = 2048;
if (dev->max_sectors)
max_sectors = dev->max_sectors;
blk_queue_max_sectors(sdev->request_queue, max_sectors);
/*
* SATA DMA transfers must be multiples of 4 byte, so
* we need to pad ATAPI transfers using an extra sg.
* Decrement max hw segments accordingly.
*/
if (dev->class == ATA_DEV_ATAPI) {
request_queue_t *q = sdev->request_queue;
blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
}
}
/** /**
* ata_scsi_slave_config - Set SCSI device attributes * ata_scsi_slave_config - Set SCSI device attributes
* @sdev: SCSI device to examine * @sdev: SCSI device to examine
...@@ -676,41 +711,18 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc) ...@@ -676,41 +711,18 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
int ata_scsi_slave_config(struct scsi_device *sdev) int ata_scsi_slave_config(struct scsi_device *sdev)
{ {
sdev->use_10_for_rw = 1; ata_scsi_sdev_config(sdev);
sdev->use_10_for_ms = 1;
blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD); blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
if (sdev->id < ATA_MAX_DEVICES) { if (sdev->id < ATA_MAX_DEVICES) {
struct ata_port *ap; struct ata_port *ap;
struct ata_device *dev; struct ata_device *dev;
unsigned int max_sectors;
ap = (struct ata_port *) &sdev->host->hostdata[0]; ap = (struct ata_port *) &sdev->host->hostdata[0];
dev = &ap->device[sdev->id]; dev = &ap->device[sdev->id];
/* TODO: 2048 is an arbitrary number, not the ata_scsi_dev_config(sdev, dev);
* hardware maximum. This should be increased to
* 65534 when Jens Axboe's patch for dynamically
* determining max_sectors is merged.
*/
max_sectors = ATA_MAX_SECTORS;
if (dev->flags & ATA_DFLAG_LBA48)
max_sectors = 2048;
if (dev->max_sectors)
max_sectors = dev->max_sectors;
blk_queue_max_sectors(sdev->request_queue, max_sectors);
/*
* SATA DMA transfers must be multiples of 4 byte, so
* we need to pad ATAPI transfers using an extra sg.
* Decrement max hw segments accordingly.
*/
if (dev->class == ATA_DEV_ATAPI) {
request_queue_t *q = sdev->request_queue;
blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
}
} }
return 0; /* scsi layer doesn't check return value, sigh */ return 0; /* scsi layer doesn't check return value, sigh */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册