Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-microblaze.git] / drivers / ata / libata-scsi.c
index b9588c5..1fb4611 100644 (file)
@@ -631,7 +631,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
 {
        struct ata_queued_cmd *qc;
 
-       qc = ata_qc_new_init(dev, cmd->request->tag);
+       qc = ata_qc_new_init(dev, scsi_cmd_to_rq(cmd)->tag);
        if (qc) {
                qc->scsicmd = cmd;
                qc->scsidone = cmd->scsi_done;
@@ -639,7 +639,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
                qc->sg = scsi_sglist(cmd);
                qc->n_elem = scsi_sg_count(cmd);
 
-               if (cmd->request->rq_flags & RQF_QUIET)
+               if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET)
                        qc->flags |= ATA_QCFLAG_QUIET;
        } else {
                cmd->result = (DID_OK << 16) | SAM_STAT_TASK_SET_FULL;
@@ -1496,7 +1496,7 @@ nothing_to_do:
 
 static bool ata_check_nblocks(struct scsi_cmnd *scmd, u32 n_blocks)
 {
-       struct request *rq = scmd->request;
+       struct request *rq = scsi_cmd_to_rq(scmd);
        u32 req_blocks;
 
        if (!blk_rq_is_passthrough(rq))
@@ -1531,7 +1531,7 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
 {
        struct scsi_cmnd *scmd = qc->scsicmd;
        const u8 *cdb = scmd->cmnd;
-       struct request *rq = scmd->request;
+       struct request *rq = scsi_cmd_to_rq(scmd);
        int class = IOPRIO_PRIO_CLASS(req_get_ioprio(rq));
        unsigned int tf_flags = 0;
        u64 block;
@@ -1765,53 +1765,6 @@ struct ata_scsi_args {
        struct scsi_cmnd        *cmd;
 };
 
-/**
- *     ata_scsi_rbuf_get - Map response buffer.
- *     @cmd: SCSI command containing buffer to be mapped.
- *     @flags: unsigned long variable to store irq enable status
- *     @copy_in: copy in from user buffer
- *
- *     Prepare buffer for simulated SCSI commands.
- *
- *     LOCKING:
- *     spin_lock_irqsave(ata_scsi_rbuf_lock) on success
- *
- *     RETURNS:
- *     Pointer to response buffer.
- */
-static void *ata_scsi_rbuf_get(struct scsi_cmnd *cmd, bool copy_in,
-                              unsigned long *flags)
-{
-       spin_lock_irqsave(&ata_scsi_rbuf_lock, *flags);
-
-       memset(ata_scsi_rbuf, 0, ATA_SCSI_RBUF_SIZE);
-       if (copy_in)
-               sg_copy_to_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
-                                 ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);
-       return ata_scsi_rbuf;
-}
-
-/**
- *     ata_scsi_rbuf_put - Unmap response buffer.
- *     @cmd: SCSI command containing buffer to be unmapped.
- *     @copy_out: copy out result
- *     @flags: @flags passed to ata_scsi_rbuf_get()
- *
- *     Returns rbuf buffer.  The result is copied to @cmd's buffer if
- *     @copy_back is true.
- *
- *     LOCKING:
- *     Unlocks ata_scsi_rbuf_lock.
- */
-static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, bool copy_out,
-                                    unsigned long *flags)
-{
-       if (copy_out)
-               sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
-                                   ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);
-       spin_unlock_irqrestore(&ata_scsi_rbuf_lock, *flags);
-}
-
 /**
  *     ata_scsi_rbuf_fill - wrapper for SCSI command simulators
  *     @args: device IDENTIFY data / SCSI command of interest.
@@ -1830,14 +1783,19 @@ static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, bool copy_out,
 static void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
                unsigned int (*actor)(struct ata_scsi_args *args, u8 *rbuf))
 {
-       u8 *rbuf;
        unsigned int rc;
        struct scsi_cmnd *cmd = args->cmd;
        unsigned long flags;
 
-       rbuf = ata_scsi_rbuf_get(cmd, false, &flags);
-       rc = actor(args, rbuf);
-       ata_scsi_rbuf_put(cmd, rc == 0, &flags);
+       spin_lock_irqsave(&ata_scsi_rbuf_lock, flags);
+
+       memset(ata_scsi_rbuf, 0, ATA_SCSI_RBUF_SIZE);
+       rc = actor(args, ata_scsi_rbuf);
+       if (rc == 0)
+               sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
+                                   ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);
+
+       spin_unlock_irqrestore(&ata_scsi_rbuf_lock, flags);
 
        if (rc == 0)
                cmd->result = SAM_STAT_GOOD;
@@ -3181,7 +3139,7 @@ static unsigned int ata_scsi_write_same_xlat(struct ata_queued_cmd *qc)
         * as it modifies the DATA OUT buffer, which would corrupt user
         * memory for SG_IO commands.
         */
-       if (unlikely(blk_rq_is_passthrough(scmd->request)))
+       if (unlikely(blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))))
                goto invalid_opcode;
 
        if (unlikely(scmd->cmd_len < 16)) {