On Tue, 2011-01-11 at 15:26 -0800, Robert Love wrote: > This patch removes the use of the Scsi_Host's host_lock > within fc_queuecommand. It also removes the DEF_SCSI_QCMD > usage so that libfc has fully moved on to the new > queuecommand interface. > > Signed-off-by: Robert Love <[email protected]> > Tested-by: Ross Brattain <[email protected]>
Looks OK to me.. Glad to see that libfc will now be running fully host_lock-less by default..! Reviewed-by: Nicholas A. Bellinger <[email protected]> > --- > drivers/scsi/libfc/fc_fcp.c | 20 ++++++-------------- > 1 files changed, 6 insertions(+), 14 deletions(-) > > diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c > index 0b082a7..6125a62 100644 > --- a/drivers/scsi/libfc/fc_fcp.c > +++ b/drivers/scsi/libfc/fc_fcp.c > @@ -1789,15 +1789,14 @@ static inline int fc_fcp_lport_queue_ready(struct > fc_lport *lport) > > /** > * fc_queuecommand() - The queuecommand function of the SCSI template > + * @shost: The Scsi_Host that the command was issued to > * @cmd: The scsi_cmnd to be executed > - * @done: The callback function to be called when the scsi_cmnd is complete > * > - * This is the i/o strategy routine, called by the SCSI layer. This routine > - * is called with the host_lock held. > + * This is the i/o strategy routine, called by the SCSI layer. > */ > -static int fc_queuecommand_lck(struct scsi_cmnd *sc_cmd, void (*done)(struct > scsi_cmnd *)) > +int fc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *sc_cmd) > { > - struct fc_lport *lport; > + struct fc_lport *lport = shost_priv(shost); > struct fc_rport *rport = starget_to_rport(scsi_target(sc_cmd->device)); > struct fc_fcp_pkt *fsp; > struct fc_rport_libfc_priv *rpriv; > @@ -1805,15 +1804,12 @@ static int fc_queuecommand_lck(struct scsi_cmnd > *sc_cmd, void (*done)(struct scs > int rc = 0; > struct fcoe_dev_stats *stats; > > - lport = shost_priv(sc_cmd->device->host); > - > rval = fc_remote_port_chkready(rport); > if (rval) { > sc_cmd->result = rval; > - done(sc_cmd); > + sc_cmd->scsi_done(sc_cmd); > return 0; > } > - spin_unlock_irq(lport->host->host_lock); > > if (!*(struct fc_remote_port **)rport->dd_data) { > /* > @@ -1821,7 +1817,7 @@ static int fc_queuecommand_lck(struct scsi_cmnd > *sc_cmd, void (*done)(struct scs > * online > */ > sc_cmd->result = DID_IMM_RETRY << 16; > - done(sc_cmd); > + sc_cmd->scsi_done(sc_cmd); > goto out; > } > > @@ -1845,7 +1841,6 @@ static int fc_queuecommand_lck(struct scsi_cmnd > *sc_cmd, void (*done)(struct scs > */ > fsp->cmd = sc_cmd; /* save the cmd */ > fsp->rport = rport; /* set the remote port ptr */ > - sc_cmd->scsi_done = done; > > /* > * set up the transfer length > @@ -1886,11 +1881,8 @@ static int fc_queuecommand_lck(struct scsi_cmnd > *sc_cmd, void (*done)(struct scs > rc = SCSI_MLQUEUE_HOST_BUSY; > } > out: > - spin_lock_irq(lport->host->host_lock); > return rc; > } > - > -DEF_SCSI_QCMD(fc_queuecommand) > EXPORT_SYMBOL(fc_queuecommand); > > /** > > _______________________________________________ > devel mailing list > [email protected] > https://lists.open-fcoe.org/mailman/listinfo/devel _______________________________________________ devel mailing list [email protected] https://lists.open-fcoe.org/mailman/listinfo/devel
