diff options
Diffstat (limited to 'drivers/scsi/sata_sil24.c')
-rw-r--r-- | drivers/scsi/sata_sil24.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index e0d6f194f54f..a0ad3ed2200a 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c | |||
@@ -654,7 +654,8 @@ static void sil24_eng_timeout(struct ata_port *ap) | |||
654 | */ | 654 | */ |
655 | printk(KERN_ERR "ata%u: command timeout\n", ap->id); | 655 | printk(KERN_ERR "ata%u: command timeout\n", ap->id); |
656 | qc->scsidone = scsi_finish_command; | 656 | qc->scsidone = scsi_finish_command; |
657 | ata_qc_complete(qc, AC_ERR_OTHER); | 657 | qc->err_mask |= AC_ERR_OTHER; |
658 | ata_qc_complete(qc); | ||
658 | 659 | ||
659 | sil24_reset_controller(ap); | 660 | sil24_reset_controller(ap); |
660 | } | 661 | } |
@@ -711,8 +712,10 @@ static void sil24_error_intr(struct ata_port *ap, u32 slot_stat) | |||
711 | sil24_reset_controller(ap); | 712 | sil24_reset_controller(ap); |
712 | } | 713 | } |
713 | 714 | ||
714 | if (qc) | 715 | if (qc) { |
715 | ata_qc_complete(qc, err_mask); | 716 | qc->err_mask |= err_mask; |
717 | ata_qc_complete(qc); | ||
718 | } | ||
716 | } | 719 | } |
717 | 720 | ||
718 | static inline void sil24_host_intr(struct ata_port *ap) | 721 | static inline void sil24_host_intr(struct ata_port *ap) |
@@ -734,8 +737,10 @@ static inline void sil24_host_intr(struct ata_port *ap) | |||
734 | */ | 737 | */ |
735 | sil24_update_tf(ap); | 738 | sil24_update_tf(ap); |
736 | 739 | ||
737 | if (qc) | 740 | if (qc) { |
738 | ata_qc_complete(qc, ac_err_mask(pp->tf.command)); | 741 | qc->err_mask |= ac_err_mask(pp->tf.command); |
742 | ata_qc_complete(qc); | ||
743 | } | ||
739 | } else | 744 | } else |
740 | sil24_error_intr(ap, slot_stat); | 745 | sil24_error_intr(ap, slot_stat); |
741 | } | 746 | } |