michaelc@xxxxxxxxxxx wrote: > From: Mike Christie <michaelc@xxxxxxxxxxx> > > Add a queueing helper which will return SCSI_MLQUEUE_TARGET_BUSY > if we are transitioning because there is no need to call into > the driver anymore at that point. > > Signed-off-by: Mike Christie <michaelc@xxxxxxxxxxx> > --- > include/scsi/scsi_transport_fc.h | 33 +++++++++++++++++++++++++++++++++ > 1 files changed, 33 insertions(+), 0 deletions(-) > > diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h > index 4769efd..62a6a74 100644 > --- a/include/scsi/scsi_transport_fc.h > +++ b/include/scsi/scsi_transport_fc.h > @@ -29,6 +29,7 @@ > > #include <linux/sched.h> > #include <scsi/scsi.h> > +#include <scsi/scsi_cmnd.h> > #include <scsi/scsi_netlink.h> > > struct scsi_transport_template; > @@ -640,6 +641,38 @@ struct fc_function_template { > unsigned long disable_target_scan:1; > }; > > +/** > + * fc_remote_port_queue_ready - called to validate the remote port state > + * @rport: remote port to be checked > + * > + * Returns 0 if IO can be queued or if there the cmd should be Remove "there" from the comment. > + * completed by a call to cmd->scsi_done. Caller must check cmd->result. > + * Returns SCSI_MLQUEUE value if IO cannot be queued temporarily. How 'bout: "Returns a SCSI_MLQUEUE value if the IO cannot be queued due to an rport state transition." ? > + **/ > +static inline int > +fc_remote_port_queue_ready(struct fc_rport *rport, struct scsi_cmnd *cmd) > +{ > + int result = 0; > + > + cmd->result = 0; > + switch (rport->port_state) { > + case FC_PORTSTATE_ONLINE: > + if (rport->roles & FC_PORT_ROLE_FCP_TARGET) > + result = 0; > + else if (rport->flags & FC_RPORT_DEVLOSS_PENDING) > + result = SCSI_MLQUEUE_TARGET_BUSY; > + else > + cmd->result = DID_NO_CONNECT << 16; > + break; > + case FC_PORTSTATE_BLOCKED: > + result = SCSI_MLQUEUE_TARGET_BUSY; > + break; > + default: > + cmd->result = DID_NO_CONNECT << 16; > + break; > + } > + return result; > +} > > /** > * fc_remote_port_chkready - called to validate the remote port state -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html