mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[PATCH] libata-hp-prep: update ata_scsi_find_dev() and friends
Separate out ata_find_dev() and __ata_scsi_find_dev() from ata_scsi_find_dev(). These will be used by later hotplug implementation. Signed-off-by: Tejun Heo <htejun@gmail.com>
This commit is contained in:
parent
72fa4b742b
commit
ab5b3a5b2d
1 changed files with 25 additions and 15 deletions
|
@ -52,8 +52,12 @@
|
|||
#define SECTOR_SIZE 512
|
||||
|
||||
typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
|
||||
static struct ata_device *
|
||||
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev);
|
||||
|
||||
static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
|
||||
const struct scsi_device *scsidev);
|
||||
static struct ata_device * ata_scsi_find_dev(struct ata_port *ap,
|
||||
const struct scsi_device *scsidev);
|
||||
|
||||
|
||||
#define RW_RECOVERY_MPAGE 0x1
|
||||
#define RW_RECOVERY_MPAGE_LEN 12
|
||||
|
@ -2308,6 +2312,23 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct ata_device * ata_find_dev(struct ata_port *ap, int id)
|
||||
{
|
||||
if (likely(id < ATA_MAX_DEVICES))
|
||||
return &ap->device[id];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
|
||||
const struct scsi_device *scsidev)
|
||||
{
|
||||
/* skip commands not addressed to targets we simulate */
|
||||
if (unlikely(scsidev->channel || scsidev->lun))
|
||||
return NULL;
|
||||
|
||||
return ata_find_dev(ap, scsidev->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_scsi_find_dev - lookup ata_device from scsi_cmnd
|
||||
* @ap: ATA port to which the device is attached
|
||||
|
@ -2324,23 +2345,12 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
|
|||
* RETURNS:
|
||||
* Associated ATA device, or %NULL if not found.
|
||||
*/
|
||||
|
||||
static struct ata_device *
|
||||
ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
|
||||
{
|
||||
struct ata_device *dev;
|
||||
struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
|
||||
|
||||
/* skip commands not addressed to targets we simulate */
|
||||
if (likely(scsidev->id < ATA_MAX_DEVICES))
|
||||
dev = &ap->device[scsidev->id];
|
||||
else
|
||||
return NULL;
|
||||
|
||||
if (unlikely((scsidev->channel != 0) ||
|
||||
(scsidev->lun != 0)))
|
||||
return NULL;
|
||||
|
||||
if (unlikely(!ata_dev_enabled(dev)))
|
||||
if (unlikely(!dev || !ata_dev_enabled(dev)))
|
||||
return NULL;
|
||||
|
||||
if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) {
|
||||
|
|
Loading…
Reference in a new issue