On Sunday 16 March 2008, Linus Torvalds wrote:OK, lets try it. From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Subject: [PATCH] ide: correctly handle DRQ bit set on error also for special requests commit 4d977e43d8ae758434e603cf2455d955f71c77c4 ("ide: check BUSY and ERROR status bits before reading data in drive_cmd_intr()") changed DRQ handling logic (as pointed out by Linus). Fix it by flushing leftover data for commands using PIO-in protocol and special requests (rq->cmd_type == REQ_TYPE_ATA_TASKFILE). Cc: Anders Eriksson <aeriksson@fastmail.fm> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> --- against 2.6.25-rc5, untested drivers/ide/ide-io.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) Index: b/drivers/ide/ide-io.c =================================================================== --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -540,12 +540,19 @@ EXPORT_SYMBOL_GPL(__ide_error); ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, u8 stat) { - struct request *rq; + ide_hwif_t *hwif = drive->hwif; + struct request *rq = hwif->hwgroup->rq; u8 err; + if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { + if (hwif->data_phase == TASKFILE_IN && (stat & DRQ_STAT) && + (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) + try_to_flush_leftover_data(drive); + } + err = ide_dump_status(drive, msg, stat); - if ((rq = HWGROUP(drive)->rq) == NULL) + if (rq == NULL) return ide_stopped; /* retry only "normal" I/O: */ --
| Vladislav Bolkhovitin | Re: Integration of SCST in the mainstream Linux kernel |
| Andrew Morton | -mm merge plans for 2.6.23 |
| KAMEZAWA Hiroyuki | Re: 2.6.23-mm1 |
| Greg Kroah-Hartman | [PATCH 005/196] Chinese: add translation of SubmittingDrivers |
git: | |
| Alan Cox | Re: [PATCH] drivers/net: remove network drivers' last few uses of IRQF_SAMPLE_RANDOM |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Natalie Protasevich | [BUG] New Kernel Bugs |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
