Skip to content

Commit

Permalink
[PATCH] libata-hp-prep: update ata_scsi_find_dev() and friends
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tejun Heo committed May 31, 2006
1 parent 72fa4b7 commit ab5b3a5
Showing 1 changed file with 25 additions and 15 deletions.
40 changes: 25 additions & 15 deletions drivers/scsi/libata-scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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;

/* 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;
struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);

if (unlikely(!ata_dev_enabled(dev)))
if (unlikely(!dev || !ata_dev_enabled(dev)))
return NULL;

if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) {
Expand Down

0 comments on commit ab5b3a5

Please sign in to comment.