]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[SCSI] qla2xxx: Remove host_lock in queuecommand function
authorMadhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Wed, 23 Feb 2011 23:27:06 +0000 (15:27 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 25 Feb 2011 17:21:52 +0000 (12:21 -0500)
Also in qla_os.c, rename the function, remove DEF_SCSI_QCMD, etc.

Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_os.c

index c194c23ca1fb6fef027c8d74bdd7f064e5274877..a37ac8b73e5585f7a7847f1d72e5e03115e5b0c3 100644 (file)
@@ -506,7 +506,7 @@ qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str)
 
 static inline srb_t *
 qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport,
-    struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
+       struct scsi_cmnd *cmd)
 {
        srb_t *sp;
        struct qla_hw_data *ha = vha->hw;
@@ -520,14 +520,13 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport,
        sp->cmd = cmd;
        sp->flags = 0;
        CMD_SP(cmd) = (void *)sp;
-       cmd->scsi_done = done;
        sp->ctx = NULL;
 
        return sp;
 }
 
 static int
-qla2xxx_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
+qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 {
        scsi_qla_host_t *vha = shost_priv(cmd->device->host);
        fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
@@ -537,7 +536,6 @@ qla2xxx_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)
        srb_t *sp;
        int rval;
 
-       spin_unlock_irq(vha->host->host_lock);
        if (ha->flags.eeh_busy) {
                if (ha->flags.pci_channel_io_perm_failure)
                        cmd->result = DID_NO_CONNECT << 16;
@@ -570,40 +568,32 @@ qla2xxx_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)
                goto qc24_target_busy;
        }
 
-       sp = qla2x00_get_new_sp(base_vha, fcport, cmd, done);
+       sp = qla2x00_get_new_sp(base_vha, fcport, cmd);
        if (!sp)
-               goto qc24_host_busy_lock;
+               goto qc24_host_busy;
 
        rval = ha->isp_ops->start_scsi(sp);
        if (rval != QLA_SUCCESS)
                goto qc24_host_busy_free_sp;
 
-       spin_lock_irq(vha->host->host_lock);
-
        return 0;
 
 qc24_host_busy_free_sp:
        qla2x00_sp_free_dma(sp);
        mempool_free(sp, ha->srb_mempool);
 
-qc24_host_busy_lock:
-       spin_lock_irq(vha->host->host_lock);
+qc24_host_busy:
        return SCSI_MLQUEUE_HOST_BUSY;
 
 qc24_target_busy:
-       spin_lock_irq(vha->host->host_lock);
        return SCSI_MLQUEUE_TARGET_BUSY;
 
 qc24_fail_command:
-       spin_lock_irq(vha->host->host_lock);
-       done(cmd);
+       cmd->scsi_done(cmd);
 
        return 0;
 }
 
-static DEF_SCSI_QCMD(qla2xxx_queuecommand)
-
-
 /*
  * qla2x00_eh_wait_on_command
  *    Waits for the command to be returned by the Firmware for some