diff -urpN --exclude-from=/home/davej/.exclude bk-linus/drivers/scsi/ppa.c linux-2.5/drivers/scsi/ppa.c
--- bk-linus/drivers/scsi/ppa.c	2002-11-21 02:18:13.000000000 +0000
+++ linux-2.5/drivers/scsi/ppa.c	2002-11-21 18:00:49.000000000 +0000
@@ -148,7 +148,6 @@ int ppa_detect(Scsi_Host_Template * host
 		      "pardevice is owning the port for too longtime!\n",
 			   i);
 		    parport_unregister_device(ppa_hosts[i].dev);
-		    spin_lock_irq(ppa_hosts[i].cur_cmd->host->host_lock);
 		    return 0;
 		}
 	    }
@@ -219,13 +218,11 @@ int ppa_detect(Scsi_Host_Template * host
 	    printk("  supported by the imm (ZIP Plus) driver. If the\n");
 	    printk("  cable is marked with \"AutoDetect\", this is what has\n");
 	    printk("  happened.\n");
-	    spin_lock_irq(hreg->host_lock);
 	    return 0;
 	}
 	try_again = 1;
 	goto retry_entry;
     } else {
-	spin_lock_irq(hreg->host_lock);
 	return 1;		/* return number of hosts detected */
     }
 }
@@ -790,6 +787,7 @@ static void ppa_interrupt(void *data)
 {
     ppa_struct *tmp = (ppa_struct *) data;
     Scsi_Cmnd *cmd = tmp->cur_cmd;
+    struct Scsi_Host *host = cmd->host;
     unsigned long flags;
 
     if (!cmd) {
@@ -840,11 +838,12 @@ static void ppa_interrupt(void *data)
     if (cmd->SCp.phase > 0)
 	ppa_pb_release(cmd->host->unique_id);
 
+	spin_lock_irqsave(host->host_lock, flags);
     tmp->cur_cmd = 0;
-    
-    spin_lock_irqsave(cmd->host->host_lock, flags);
+
     cmd->scsi_done(cmd);
-    spin_unlock_irqrestore(cmd->host->host_lock, flags);
+	spin_unlock_irqrestore(host->host_lock, flags);
+
     return;
 }
 
@@ -918,7 +917,7 @@ static int ppa_engine(ppa_struct * tmp, 
     case 4:			/* Phase 4 - Setup scatter/gather buffers */
 	if (cmd->use_sg) {
 	    /* if many buffers are available, start filling the first */
-	    cmd->SCp.buffer = (struct scatterlist *) cmd->request_buffer;
+	    cmd->SCp.buffer = (struct scatterlist *) cmd->buffer;
 	    cmd->SCp.this_residual = cmd->SCp.buffer->length;
 	    cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
 	} else {
