linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / scsi / NCR53C9x.c
index bdc6bb2..c7dd015 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <linux/module.h>
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
 #include <linux/types.h>
@@ -911,7 +912,7 @@ static void esp_get_dmabufs(struct NCR_ESP *esp, Scsi_Cmnd *sp)
                        sp->SCp.ptr =
                                (char *) virt_to_phys(sp->request_buffer);
        } else {
-               sp->SCp.buffer = (struct scatterlist *) sp->request_buffer;
+               sp->SCp.buffer = (struct scatterlist *) sp->buffer;
                sp->SCp.buffers_residual = sp->use_sg - 1;
                sp->SCp.this_residual = sp->SCp.buffer->length;
                if (esp->dma_mmu_get_scsi_sgl)
@@ -2152,23 +2153,29 @@ static int esp_do_data_finale(struct NCR_ESP *esp,
  */
 static int esp_should_clear_sync(Scsi_Cmnd *sp)
 {
-       unchar cmd = sp->cmnd[0];
+       unchar cmd1 = sp->cmnd[0];
+       unchar cmd2 = sp->data_cmnd[0];
 
        /* These cases are for spinning up a disk and
         * waiting for that spinup to complete.
         */
-       if(cmd == START_STOP)
+       if(cmd1 == START_STOP ||
+          cmd2 == START_STOP)
                return 0;
 
-       if(cmd == TEST_UNIT_READY)
+       if(cmd1 == TEST_UNIT_READY ||
+          cmd2 == TEST_UNIT_READY)
                return 0;
 
        /* One more special case for SCSI tape drives,
         * this is what is used to probe the device for
         * completion of a rewind or tape load operation.
         */
-       if(sp->device->type == TYPE_TAPE && cmd == MODE_SENSE)
-               return 0;
+       if(sp->device->type == TYPE_TAPE) {
+               if(cmd1 == MODE_SENSE ||
+                  cmd2 == MODE_SENSE)
+                       return 0;
+       }
 
        return 1;
 }