|
@@ -592,9 +592,19 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
|
|
}
|
|
|
} else if (!blk_pc_request(rq)) {
|
|
|
ide_cd_request_sense_fixup(drive, cmd);
|
|
|
- /* complain if we still have data left to transfer */
|
|
|
+
|
|
|
uptodate = cmd->nleft ? 0 : 1;
|
|
|
- if (uptodate == 0)
|
|
|
+
|
|
|
+ /*
|
|
|
+ * suck out the remaining bytes from the drive in an
|
|
|
+ * attempt to complete the data xfer. (see BZ#13399)
|
|
|
+ */
|
|
|
+ if (!(stat & ATA_ERR) && !uptodate && thislen) {
|
|
|
+ ide_pio_bytes(drive, cmd, write, thislen);
|
|
|
+ uptodate = cmd->nleft ? 0 : 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!uptodate)
|
|
|
rq->cmd_flags |= REQ_FAILED;
|
|
|
}
|
|
|
goto out_end;
|