lkml.org 
[lkml]   [2005]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [2.6.13] pktcdvd: IO-errors
From
Date
Guennadi Liakhovetski <g.liakhovetski@gmx.de> writes:

> On Mon, 26 Sep 2005, Peter Osterlund wrote:
>
> > OK. Another option since you have one good and one bad kernel, is to
> > try to find the point in time where it broke. If you are a git user,
>
> No, I am not.
>
> > you can use the "git bisect" method. If not, you can use -rc releases
> > from ftp.kernel.org.
>
> I think, I have an easier test - I just replaced the pktcdvd.[hc] in
> 2.6.13.1 with respective files from 2.6.12, and it worked. The diff is
> pretty small, so, it should be possible to actually find the culprit
> there. E.g., here's the comment, that came in with 2.6.13:
>
> - * - Optimize for throughput at the expense of latency. This means that streaming
> - * writes will never be interrupted by a read, but if the drive has to seek
> - * before the next write, switch to reading instead if there are any pending
> - * read requests.

That's quite disturbing unfortunately.

The driver works by sending reads, writes, and synchronize cache
commands to the real CD/DVD driver, which then forwards them to the
drive firmware. Except during startup, the driver will send one or
more read requests, followed by one or more write requests, followed
by exactly one synchronize cache request, and then start over with
read requests.

That patch changes the logic that decides when the driver should
change between reading and writing. However, the read/write/sync
sequence that makes your drive fail in 2.6.13 could theoretically
happen in 2.6.12 as well if you are unlucky.

I think some trial and error will be required to figure out what
causes your drive to fail. If you apply this patch to 2.6.12, does it
still work?

--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -2131,7 +2131,7 @@ static int pkt_make_request(request_queu
cloned_bio->bi_private = psd;
cloned_bio->bi_end_io = pkt_end_io_read_cloned;
pd->stats.secs_r += bio->bi_size >> 9;
- pkt_queue_bio(pd, cloned_bio, 1);
+ pkt_queue_bio(pd, cloned_bio, 0);
return 0;
}

--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-09-28 23:04    [W:0.125 / U:1.148 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site