Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3df7155 authored by Jeff Garzik 's avatar Jeff Garzik
Browse files

[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: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 12021fff
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -767,10 +767,8 @@ static void fcp_scsi_done (Scsi_Cmnd *SCpnt)
{
	unsigned long flags;

	spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
	if (FCP_CMND(SCpnt)->done)
		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)
@@ -912,9 +910,7 @@ int fcp_scsi_abort(Scsi_Cmnd *SCpnt)
		unsigned long flags;

		SCpnt->result = DID_ABORT;
		spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
		fcmd->done(SCpnt);
		spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
		printk("FC: soft abort\n");
		return SUCCESS;
	} else {
+0 −6
Original line number Diff line number Diff line
@@ -2453,8 +2453,6 @@ static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
				      u32 scsi_status, struct scsi_cmnd *SCpnt,
				      void (*done)(struct scsi_cmnd *))
{
	unsigned long flags;

	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
	 */
	spin_lock_irqsave(scsi_id->scsi_host->host_lock,flags);
	done (SCpnt);
	spin_unlock_irqrestore(scsi_id->scsi_host->host_lock,flags);

	return;
}


+0 −2
Original line number Diff line number Diff line
@@ -954,9 +954,7 @@ static int ultrastor_abort(Scsi_Cmnd *SCpnt)
    SCpnt->result = DID_ABORT << 16;
    
    /* Take the host lock to guard against scsi layer re-entry */
    spin_lock_irqsave(host->host_lock, flags);
    done(SCpnt);
    spin_unlock_irqrestore(host->host_lock, flags);

    /* Need to set a timeout here in case command never completes.  */
    return SUCCESS;