summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian King <brking@us.ibm.com>2006-06-28 08:30:31 -0500
committerJeff Garzik <jeff@garzik.org>2006-07-05 21:47:47 -0400
commite6d902a3bfd53da375588e498251f4f4f6cd9650 (patch)
tree568f79cb9c92c23d47dcee9bd9d537835ad7b384
parenta93620b860434a19820072e656f4933e101ea6d4 (diff)
downloadlinux-e6d902a3bfd53da375588e498251f4f4f6cd9650.tar.gz
linux-e6d902a3bfd53da375588e498251f4f4f6cd9650.tar.bz2
linux-e6d902a3bfd53da375588e498251f4f4f6cd9650.zip
[PATCH] libata: Conditionally set host->max_cmd_len
In preparation for SAS attached SATA devices, which will not have a libata scsi_host, only setup host->max_cmd_len if ap->host exists. Signed-off-by: Brian King <brking@us.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/scsi/libata-core.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 1c960ac1617f..fd0e6cc0619f 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -1325,6 +1325,19 @@ static void ata_dev_config_ncq(struct ata_device *dev,
snprintf(desc, desc_sz, "NCQ (depth %d/%d)", hdepth, ddepth);
}
+static void ata_set_port_max_cmd_len(struct ata_port *ap)
+{
+ int i;
+
+ if (ap->host) {
+ ap->host->max_cmd_len = 0;
+ for (i = 0; i < ATA_MAX_DEVICES; i++)
+ ap->host->max_cmd_len = max_t(unsigned int,
+ ap->host->max_cmd_len,
+ ap->device[i].cdb_len);
+ }
+}
+
/**
* ata_dev_configure - Configure the specified ATA/ATAPI device
* @dev: Target device to configure
@@ -1344,7 +1357,7 @@ int ata_dev_configure(struct ata_device *dev, int print_info)
struct ata_port *ap = dev->ap;
const u16 *id = dev->id;
unsigned int xfer_mask;
- int i, rc;
+ int rc;
if (!ata_dev_enabled(dev) && ata_msg_info(ap)) {
ata_dev_printk(dev, KERN_INFO,
@@ -1474,11 +1487,7 @@ int ata_dev_configure(struct ata_device *dev, int print_info)
cdb_intr_string);
}
- ap->host->max_cmd_len = 0;
- for (i = 0; i < ATA_MAX_DEVICES; i++)
- ap->host->max_cmd_len = max_t(unsigned int,
- ap->host->max_cmd_len,
- ap->device[i].cdb_len);
+ ata_set_port_max_cmd_len(ap);
/* limit bridge transfers to udma5, 200 sectors */
if (ata_dev_knobble(dev)) {