]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/sata_sil24.c
[SCSI] iscsi update: rm conn lock
[linux-2.6-omap-h63xx.git] / drivers / scsi / sata_sil24.c
index 340641fa1c681f4d130bf935151cbcf6c7fe352e..923130185a9e417c4570c04fe88298ce265fe102 100644 (file)
@@ -292,7 +292,6 @@ static struct scsi_host_template sil24_sht = {
        .dma_boundary           = ATA_DMA_BOUNDARY,
        .slave_configure        = ata_scsi_slave_config,
        .bios_param             = ata_std_bios_param,
-       .ordered_flush          = 1, /* NCQ not supported yet */
 };
 
 static const struct ata_port_operations sil24_ops = {
@@ -654,7 +653,8 @@ static void sil24_eng_timeout(struct ata_port *ap)
         */
        printk(KERN_ERR "ata%u: command timeout\n", ap->id);
        qc->scsidone = scsi_finish_command;
-       ata_qc_complete(qc, AC_ERR_OTHER);
+       qc->err_mask |= AC_ERR_OTHER;
+       ata_qc_complete(qc);
 
        sil24_reset_controller(ap);
 }
@@ -684,9 +684,15 @@ static void sil24_error_intr(struct ata_port *ap, u32 slot_stat)
        if (serror)
                writel(serror, port + PORT_SERROR);
 
-       printk(KERN_ERR DRV_NAME " ata%u: error interrupt on port%d\n"
-              "  stat=0x%x irq=0x%x cmd_err=%d sstatus=0x%x serror=0x%x\n",
-              ap->id, ap->port_no, slot_stat, irq_stat, cmd_err, sstatus, serror);
+       /*
+        * Don't log ATAPI device errors.  They're supposed to happen
+        * and any serious errors will be logged using sense data by
+        * the SCSI layer.
+        */
+       if (ap->device[0].class != ATA_DEV_ATAPI || cmd_err > PORT_CERR_SDB)
+               printk("ata%u: error interrupt on port%d\n"
+                      "  stat=0x%x irq=0x%x cmd_err=%d sstatus=0x%x serror=0x%x\n",
+                      ap->id, ap->port_no, slot_stat, irq_stat, cmd_err, sstatus, serror);
 
        if (cmd_err == PORT_CERR_DEV || cmd_err == PORT_CERR_SDB) {
                /*
@@ -705,8 +711,10 @@ static void sil24_error_intr(struct ata_port *ap, u32 slot_stat)
                sil24_reset_controller(ap);
        }
 
-       if (qc)
-               ata_qc_complete(qc, err_mask);
+       if (qc) {
+               qc->err_mask |= err_mask;
+               ata_qc_complete(qc);
+       }
 }
 
 static inline void sil24_host_intr(struct ata_port *ap)
@@ -728,8 +736,10 @@ static inline void sil24_host_intr(struct ata_port *ap)
                 */
                sil24_update_tf(ap);
 
-               if (qc)
-                       ata_qc_complete(qc, ac_err_mask(pp->tf.command));
+               if (qc) {
+                       qc->err_mask |= ac_err_mask(pp->tf.command);
+                       ata_qc_complete(qc);
+               }
        } else
                sil24_error_intr(ap, slot_stat);
 }