Merge branch 'master' into for-next
Conflicts: MAINTAINERS arch/arm/mach-omap2/pm24xx.c drivers/scsi/bfa/bfa_fcpim.c Needed to update to apply fixes for which the old branch was too outdated.
This commit is contained in:
@@ -684,10 +684,9 @@ void fc_disc_stop(struct fc_lport *lport)
|
||||
{
|
||||
struct fc_disc *disc = &lport->disc;
|
||||
|
||||
if (disc) {
|
||||
if (disc->pending)
|
||||
cancel_delayed_work_sync(&disc->disc_work);
|
||||
fc_disc_stop_rports(disc);
|
||||
}
|
||||
fc_disc_stop_rports(disc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -58,8 +58,7 @@ struct kmem_cache *scsi_pkt_cachep;
|
||||
#define FC_SRB_WRITE (1 << 0)
|
||||
|
||||
/*
|
||||
* The SCp.ptr should be tested and set under the host lock. NULL indicates
|
||||
* that the command has been retruned to the scsi layer.
|
||||
* The SCp.ptr should be tested and set under the scsi_pkt_queue lock
|
||||
*/
|
||||
#define CMD_SP(Cmnd) ((struct fc_fcp_pkt *)(Cmnd)->SCp.ptr)
|
||||
#define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in)
|
||||
@@ -1754,7 +1753,7 @@ static inline int fc_fcp_lport_queue_ready(struct fc_lport *lport)
|
||||
* This is the i/o strategy routine, called by the SCSI layer. This routine
|
||||
* is called with the host_lock held.
|
||||
*/
|
||||
int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
|
||||
static int fc_queuecommand_lck(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
|
||||
{
|
||||
struct fc_lport *lport;
|
||||
struct fc_rport *rport = starget_to_rport(scsi_target(sc_cmd->device));
|
||||
@@ -1852,6 +1851,8 @@ out:
|
||||
spin_lock_irq(lport->host->host_lock);
|
||||
return rc;
|
||||
}
|
||||
|
||||
DEF_SCSI_QCMD(fc_queuecommand)
|
||||
EXPORT_SYMBOL(fc_queuecommand);
|
||||
|
||||
/**
|
||||
@@ -1880,8 +1881,6 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
|
||||
|
||||
lport = fsp->lp;
|
||||
si = fc_get_scsi_internal(lport);
|
||||
if (!fsp->cmd)
|
||||
return;
|
||||
|
||||
/*
|
||||
* if can_queue ramp down is done then try can_queue ramp up
|
||||
@@ -1891,11 +1890,6 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
|
||||
fc_fcp_can_queue_ramp_up(lport);
|
||||
|
||||
sc_cmd = fsp->cmd;
|
||||
fsp->cmd = NULL;
|
||||
|
||||
if (!sc_cmd->SCp.ptr)
|
||||
return;
|
||||
|
||||
CMD_SCSI_STATUS(sc_cmd) = fsp->cdb_status;
|
||||
switch (fsp->status_code) {
|
||||
case FC_COMPLETE:
|
||||
@@ -1971,15 +1965,13 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
|
||||
break;
|
||||
}
|
||||
|
||||
if (lport->state != LPORT_ST_READY && fsp->status_code != FC_COMPLETE) {
|
||||
sc_cmd->result = (DID_REQUEUE << 16);
|
||||
FC_FCP_DBG(fsp, "Returning DID_REQUEUE to scsi-ml\n");
|
||||
}
|
||||
if (lport->state != LPORT_ST_READY && fsp->status_code != FC_COMPLETE)
|
||||
sc_cmd->result = (DID_TRANSPORT_DISRUPTED << 16);
|
||||
|
||||
spin_lock_irqsave(&si->scsi_queue_lock, flags);
|
||||
list_del(&fsp->list);
|
||||
spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
|
||||
sc_cmd->SCp.ptr = NULL;
|
||||
spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
|
||||
sc_cmd->scsi_done(sc_cmd);
|
||||
|
||||
/* release ref from initial allocation in queue command */
|
||||
@@ -1997,6 +1989,7 @@ int fc_eh_abort(struct scsi_cmnd *sc_cmd)
|
||||
{
|
||||
struct fc_fcp_pkt *fsp;
|
||||
struct fc_lport *lport;
|
||||
struct fc_fcp_internal *si;
|
||||
int rc = FAILED;
|
||||
unsigned long flags;
|
||||
|
||||
@@ -2006,7 +1999,8 @@ int fc_eh_abort(struct scsi_cmnd *sc_cmd)
|
||||
else if (!lport->link_up)
|
||||
return rc;
|
||||
|
||||
spin_lock_irqsave(lport->host->host_lock, flags);
|
||||
si = fc_get_scsi_internal(lport);
|
||||
spin_lock_irqsave(&si->scsi_queue_lock, flags);
|
||||
fsp = CMD_SP(sc_cmd);
|
||||
if (!fsp) {
|
||||
/* command completed while scsi eh was setting up */
|
||||
@@ -2015,7 +2009,7 @@ int fc_eh_abort(struct scsi_cmnd *sc_cmd)
|
||||
}
|
||||
/* grab a ref so the fsp and sc_cmd cannot be relased from under us */
|
||||
fc_fcp_pkt_hold(fsp);
|
||||
spin_unlock_irqrestore(lport->host->host_lock, flags);
|
||||
spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
|
||||
|
||||
if (fc_fcp_lock_pkt(fsp)) {
|
||||
/* completed while we were waiting for timer to be deleted */
|
||||
|
@@ -1447,13 +1447,7 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
|
||||
}
|
||||
|
||||
did = fc_frame_did(fp);
|
||||
|
||||
if (!did) {
|
||||
FC_LPORT_DBG(lport, "Bad FLOGI response\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (fc_frame_payload_op(fp) == ELS_LS_ACC) {
|
||||
if (fc_frame_payload_op(fp) == ELS_LS_ACC && did) {
|
||||
flp = fc_frame_payload_get(fp, sizeof(*flp));
|
||||
if (flp) {
|
||||
mfs = ntohs(flp->fl_csp.sp_bb_data) &
|
||||
@@ -1492,8 +1486,10 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
|
||||
fc_lport_enter_dns(lport);
|
||||
}
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
FC_LPORT_DBG(lport, "FLOGI RJT or bad response\n");
|
||||
fc_lport_error(lport, fp);
|
||||
}
|
||||
|
||||
out:
|
||||
fc_frame_free(fp);
|
||||
|
@@ -196,9 +196,9 @@ static const char *fc_rport_state(struct fc_rport_priv *rdata)
|
||||
void fc_set_rport_loss_tmo(struct fc_rport *rport, u32 timeout)
|
||||
{
|
||||
if (timeout)
|
||||
rport->dev_loss_tmo = timeout + 5;
|
||||
rport->dev_loss_tmo = timeout;
|
||||
else
|
||||
rport->dev_loss_tmo = 30;
|
||||
rport->dev_loss_tmo = 1;
|
||||
}
|
||||
EXPORT_SYMBOL(fc_set_rport_loss_tmo);
|
||||
|
||||
|
Reference in New Issue
Block a user