Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 221474
b: refs/heads/master
c: 8b7ac2b
h: refs/heads/master
v: v3
  • Loading branch information
Vasu Dev authored and James Bottomley committed Oct 25, 2010
1 parent 5cd0d47 commit 574e71f
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3067817a5d3ef99c5b1a4e4ca8c5b15bc7fc468d
refs/heads/master: 8b7ac2bb07bbadb0636f21f51564e6d363bb6d20
18 changes: 6 additions & 12 deletions trunk/drivers/scsi/libfc/fc_fcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -1880,8 +1879,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
Expand All @@ -1891,11 +1888,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:
Expand Down Expand Up @@ -1976,8 +1968,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)

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 */
Expand All @@ -1995,6 +1987,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;

Expand All @@ -2004,7 +1997,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 */
Expand All @@ -2013,7 +2007,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 */
Expand Down

0 comments on commit 574e71f

Please sign in to comment.