diff options
Diffstat (limited to 'drivers/ide/ide-tape.c')
-rw-r--r-- | drivers/ide/ide-tape.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 5adc2c9ae418..cba18a675506 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -1020,7 +1020,7 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive, | |||
1020 | 1020 | ||
1021 | ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_DEVICE, bcount, dma_ok); | 1021 | ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_DEVICE, bcount, dma_ok); |
1022 | 1022 | ||
1023 | if (test_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags)) { | 1023 | if (pc->flags & PC_FLAG_DRQ_INTERRUPT) { |
1024 | ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc, | 1024 | ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc, |
1025 | IDETAPE_WAIT_CMD, NULL); | 1025 | IDETAPE_WAIT_CMD, NULL); |
1026 | return ide_started; | 1026 | return ide_started; |
@@ -1143,8 +1143,10 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, | |||
1143 | } | 1143 | } |
1144 | 1144 | ||
1145 | /* Retry a failed packet command */ | 1145 | /* Retry a failed packet command */ |
1146 | if (tape->failed_pc && tape->pc->c[0] == REQUEST_SENSE) | 1146 | if (tape->failed_pc && tape->pc->c[0] == REQUEST_SENSE) { |
1147 | return idetape_issue_pc(drive, tape->failed_pc); | 1147 | pc = tape->failed_pc; |
1148 | goto out; | ||
1149 | } | ||
1148 | 1150 | ||
1149 | if (postponed_rq != NULL) | 1151 | if (postponed_rq != NULL) |
1150 | if (rq != postponed_rq) { | 1152 | if (rq != postponed_rq) { |
@@ -1216,6 +1218,9 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, | |||
1216 | } | 1218 | } |
1217 | BUG(); | 1219 | BUG(); |
1218 | out: | 1220 | out: |
1221 | if (test_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags)) | ||
1222 | pc->flags |= PC_FLAG_DRQ_INTERRUPT; | ||
1223 | |||
1219 | return idetape_issue_pc(drive, pc); | 1224 | return idetape_issue_pc(drive, pc); |
1220 | } | 1225 | } |
1221 | 1226 | ||