Messages in this thread | | | From | Bartlomiej Zolnierkiewicz <> | Subject | Re: [patch 2/6] ide: fix ide_kill_rq() for special ide-{floppy,tape} driver requests | Date | Wed, 24 Jun 2009 12:09:53 +0200 |
| |
On Wednesday 24 June 2009 08:49:29 David Miller wrote: > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > Date: Tue, 23 Jun 2009 23:26:06 +0200 > > > @@ -152,7 +152,7 @@ void ide_kill_rq(ide_drive_t *drive, str > > > > if ((media == ide_floppy || media == ide_tape) && drv_req) { > > rq->errors = 0; > > - ide_complete_rq(drive, 0, blk_rq_bytes(rq)); > > + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > > } else { > > if (media == ide_tape) > > rq->errors = IDE_DRV_ERROR_GENERAL; > > I've done some research and this logic of returning "0" appears to be > intentional. > > It keeps the block layer from printing the "I/O error" kernel log > message during completion of the request.
It would be pretty illogical behavior for driver to intentionally not let user know about the failed requests..
> IDE tape as one example, seems to have it's own system of passing > errors back up to the special command completion, via rq->errors > and IDE_DRV_ERROR_GENERAL.
Please look at the patch/code:
rq->errors = 0; - ide_complete_rq(drive, 0, blk_rq_bytes(rq)); + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
and notice rq->errors line.
> See idetape_queue_rw_tail() and ide_tape_callback() for example. > > IDE floppy has similar pieces of logic, and possibly similar desires > wrt. emission of the block layer I/O error log message during > special requests. > > When something sticks out like an eyesore (as this -EIO thing does) > and seems to make no sense at all, there often is some obscure > reason.
The obscure reasons is just the fact that both ide-floppy and ide-tape had a they own duplicated/buggy request completion routines.
While they were being unified the whole bunch of similar class of bugs were fixed so I agree that there may still be more issues to deal with there.
| |