[SCSI] Remove unnecessary locking around completion function calls
authorJeff Garzik <jgarzik@pobox.com>
Sat, 28 May 2005 11:47:39 +0000 (07:47 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Fri, 17 Jun 2005 17:04:37 +0000 (12:04 -0500)
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>
drivers/fc4/fc.c
drivers/ieee1394/sbp2.c
drivers/scsi/ultrastor.c

index 1fbb219aa9baa1fbc7a57927636881e127a00e02..d9e11b5366599e4f51263441db9d6096fff8db2e 100644 (file)
@@ -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 {
index aa941025072ef2695ec99afa8cecbed41aa18641..de552486b1c9fca9aa0124ffc890a5b97d392e67 100644 (file)
@@ -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;
 }
 
 
index 97f4d9112b48522a416679afaf380d92554943ab..2c17470a229d907d7a9233583368b5595538ea93 100644 (file)
@@ -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;