* Returns:
  *     0 on success / other on failure
  **/
-static int ibmvfc_queuecommand_lck(struct scsi_cmnd *cmnd,
-                              void (*done) (struct scsi_cmnd *))
+static int ibmvfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 {
-       struct ibmvfc_host *vhost = shost_priv(cmnd->device->host);
+       struct ibmvfc_host *vhost = shost_priv(shost);
        struct fc_rport *rport = starget_to_rport(scsi_target(cmnd->device));
        struct ibmvfc_cmd *vfc_cmd;
        struct ibmvfc_fcp_cmd_iu *iu;
        if (unlikely((rc = fc_remote_port_chkready(rport))) ||
            unlikely((rc = ibmvfc_host_chkready(vhost)))) {
                cmnd->result = rc;
-               done(cmnd);
+               cmnd->scsi_done(cmnd);
                return 0;
        }
 
        evt = ibmvfc_get_event(&vhost->crq);
        ibmvfc_init_event(evt, ibmvfc_scsi_done, IBMVFC_CMD_FORMAT);
        evt->cmnd = cmnd;
-       cmnd->scsi_done = done;
 
        vfc_cmd = ibmvfc_init_vfc_cmd(evt, cmnd->device);
        iu = ibmvfc_get_fcp_iu(vhost, vfc_cmd);
                            "Failed to map DMA buffer for command. rc=%d\n", rc);
 
        cmnd->result = DID_ERROR << 16;
-       done(cmnd);
+       cmnd->scsi_done(cmnd);
        return 0;
 }
 
-static DEF_SCSI_QCMD(ibmvfc_queuecommand)
-
 /**
  * ibmvfc_sync_completion - Signal that a synchronous command has completed
  * @evt:       ibmvfc event struct