[SCSI] Remove unnecessary locking around completion function calls
The SCSI ->done() hook should not be called from inside a spinlock. Drivers that do this are mostly cut-n-paste from 2.2.x-era. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
@@ -767,10 +767,8 @@ static void fcp_scsi_done (Scsi_Cmnd *SCpnt)
|
|||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
|
|
||||||
if (FCP_CMND(SCpnt)->done)
|
if (FCP_CMND(SCpnt)->done)
|
||||||
FCP_CMND(SCpnt)->done(SCpnt);
|
FCP_CMND(SCpnt)->done(SCpnt);
|
||||||
spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fcp_scsi_queue_it(fc_channel *fc, Scsi_Cmnd *SCpnt, fcp_cmnd *fcmd, int prepare)
|
static int fcp_scsi_queue_it(fc_channel *fc, Scsi_Cmnd *SCpnt, fcp_cmnd *fcmd, int prepare)
|
||||||
@@ -912,9 +910,7 @@ int fcp_scsi_abort(Scsi_Cmnd *SCpnt)
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
SCpnt->result = DID_ABORT;
|
SCpnt->result = DID_ABORT;
|
||||||
spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
|
|
||||||
fcmd->done(SCpnt);
|
fcmd->done(SCpnt);
|
||||||
spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
|
|
||||||
printk("FC: soft abort\n");
|
printk("FC: soft abort\n");
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -2453,8 +2453,6 @@ static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
|
|||||||
u32 scsi_status, struct scsi_cmnd *SCpnt,
|
u32 scsi_status, struct scsi_cmnd *SCpnt,
|
||||||
void (*done)(struct scsi_cmnd *))
|
void (*done)(struct scsi_cmnd *))
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
SBP2_DEBUG("sbp2scsi_complete_command");
|
SBP2_DEBUG("sbp2scsi_complete_command");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2553,11 +2551,7 @@ static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
|
|||||||
/*
|
/*
|
||||||
* Tell scsi stack that we're done with this command
|
* Tell scsi stack that we're done with this command
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(scsi_id->scsi_host->host_lock,flags);
|
|
||||||
done (SCpnt);
|
done (SCpnt);
|
||||||
spin_unlock_irqrestore(scsi_id->scsi_host->host_lock,flags);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -954,9 +954,7 @@ static int ultrastor_abort(Scsi_Cmnd *SCpnt)
|
|||||||
SCpnt->result = DID_ABORT << 16;
|
SCpnt->result = DID_ABORT << 16;
|
||||||
|
|
||||||
/* Take the host lock to guard against scsi layer re-entry */
|
/* Take the host lock to guard against scsi layer re-entry */
|
||||||
spin_lock_irqsave(host->host_lock, flags);
|
|
||||||
done(SCpnt);
|
done(SCpnt);
|
||||||
spin_unlock_irqrestore(host->host_lock, flags);
|
|
||||||
|
|
||||||
/* Need to set a timeout here in case command never completes. */
|
/* Need to set a timeout here in case command never completes. */
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
Reference in New Issue
Block a user