diff options
Diffstat (limited to 'drivers/scsi/libata-scsi.c')
-rw-r--r-- | drivers/scsi/libata-scsi.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index d86abed62007..93d18a74c401 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -2374,6 +2374,36 @@ static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap, | |||
2374 | } | 2374 | } |
2375 | 2375 | ||
2376 | /** | 2376 | /** |
2377 | * ata_scsi_dev_enabled - determine if device is enabled | ||
2378 | * @dev: ATA device | ||
2379 | * | ||
2380 | * Determine if commands should be sent to the specified device. | ||
2381 | * | ||
2382 | * LOCKING: | ||
2383 | * spin_lock_irqsave(host_set lock) | ||
2384 | * | ||
2385 | * RETURNS: | ||
2386 | * 0 if commands are not allowed / 1 if commands are allowed | ||
2387 | */ | ||
2388 | |||
2389 | static int ata_scsi_dev_enabled(struct ata_device *dev) | ||
2390 | { | ||
2391 | if (unlikely(!ata_dev_enabled(dev))) | ||
2392 | return 0; | ||
2393 | |||
2394 | if (!atapi_enabled || (dev->ap->flags & ATA_FLAG_NO_ATAPI)) { | ||
2395 | if (unlikely(dev->class == ATA_DEV_ATAPI)) { | ||
2396 | ata_dev_printk(dev, KERN_WARNING, | ||
2397 | "WARNING: ATAPI is %s, device ignored.\n", | ||
2398 | atapi_enabled ? "not supported with this driver" : "disabled"); | ||
2399 | return 0; | ||
2400 | } | ||
2401 | } | ||
2402 | |||
2403 | return 1; | ||
2404 | } | ||
2405 | |||
2406 | /** | ||
2377 | * ata_scsi_find_dev - lookup ata_device from scsi_cmnd | 2407 | * ata_scsi_find_dev - lookup ata_device from scsi_cmnd |
2378 | * @ap: ATA port to which the device is attached | 2408 | * @ap: ATA port to which the device is attached |
2379 | * @scsidev: SCSI device from which we derive the ATA device | 2409 | * @scsidev: SCSI device from which we derive the ATA device |
@@ -2394,18 +2424,9 @@ ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev) | |||
2394 | { | 2424 | { |
2395 | struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev); | 2425 | struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev); |
2396 | 2426 | ||
2397 | if (unlikely(!dev || !ata_dev_enabled(dev))) | 2427 | if (unlikely(!dev || !ata_scsi_dev_enabled(dev))) |
2398 | return NULL; | 2428 | return NULL; |
2399 | 2429 | ||
2400 | if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) { | ||
2401 | if (unlikely(dev->class == ATA_DEV_ATAPI)) { | ||
2402 | ata_dev_printk(dev, KERN_WARNING, | ||
2403 | "WARNING: ATAPI is %s, device ignored.\n", | ||
2404 | atapi_enabled ? "not supported with this driver" : "disabled"); | ||
2405 | return NULL; | ||
2406 | } | ||
2407 | } | ||
2408 | |||
2409 | return dev; | 2430 | return dev; |
2410 | } | 2431 | } |
2411 | 2432 | ||