aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-scsi.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-09-20 18:10:33 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-10-02 13:30:30 -0400
commitf6e67035a9edd79b8b202c159d5bec560bb9c358 (patch)
treeba884b5a2de7cb60bd1e6f67813b47fdb8ff509a /drivers/ata/libata-scsi.c
parent2fc62e2ac350b8f574e0a09170b350a8f2fa4a02 (diff)
[SCSI] libsas,libata: fix ->change_queue_{depth|type} for sata devices
Pass queue_depth change requests to libata, and prevent queue_type changes for ATA devices. Otherwise: 1/ we do not honor the libata specific restrictions on the queue depth 2/ libsas drivers that do not set sdev->tagged_supported are unable to change the queue_depth of ata devices via sysfs Signed-off-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/ata/libata-scsi.c')
-rw-r--r--drivers/ata/libata-scsi.c44
1 files changed, 29 insertions, 15 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 46d087f08607..19ba77032ac2 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1215,25 +1215,15 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev)
1215} 1215}
1216 1216
1217/** 1217/**
1218 * ata_scsi_change_queue_depth - SCSI callback for queue depth config 1218 * __ata_change_queue_depth - helper for ata_scsi_change_queue_depth
1219 * @sdev: SCSI device to configure queue depth for
1220 * @queue_depth: new queue depth
1221 * @reason: calling context
1222 *
1223 * This is libata standard hostt->change_queue_depth callback.
1224 * SCSI will call into this callback when user tries to set queue
1225 * depth via sysfs.
1226 * 1219 *
1227 * LOCKING: 1220 * libsas and libata have different approaches for associating a sdev to
1228 * SCSI layer (we don't care) 1221 * its ata_port.
1229 * 1222 *
1230 * RETURNS:
1231 * Newly configured queue depth.
1232 */ 1223 */
1233int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth, 1224int __ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev,
1234 int reason) 1225 int queue_depth, int reason)
1235{ 1226{
1236 struct ata_port *ap = ata_shost_to_port(sdev->host);
1237 struct ata_device *dev; 1227 struct ata_device *dev;
1238 unsigned long flags; 1228 unsigned long flags;
1239 1229
@@ -1269,6 +1259,30 @@ int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth,
1269} 1259}
1270 1260
1271/** 1261/**
1262 * ata_scsi_change_queue_depth - SCSI callback for queue depth config
1263 * @sdev: SCSI device to configure queue depth for
1264 * @queue_depth: new queue depth
1265 * @reason: calling context
1266 *
1267 * This is libata standard hostt->change_queue_depth callback.
1268 * SCSI will call into this callback when user tries to set queue
1269 * depth via sysfs.
1270 *
1271 * LOCKING:
1272 * SCSI layer (we don't care)
1273 *
1274 * RETURNS:
1275 * Newly configured queue depth.
1276 */
1277int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth,
1278 int reason)
1279{
1280 struct ata_port *ap = ata_shost_to_port(sdev->host);
1281
1282 return __ata_change_queue_depth(ap, sdev, queue_depth, reason);
1283}
1284
1285/**
1272 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command 1286 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
1273 * @qc: Storage for translated ATA taskfile 1287 * @qc: Storage for translated ATA taskfile
1274 * 1288 *