Re: Badness in as_insert_request at drivers/block/as-iosched.c:1519

From: Jens Axboe
Date: Sat Jan 07 2006 - 09:52:11 EST


On Sat, Jan 07 2006, Mark v Wolher wrote:
> Jens Axboe wrote:
> > On Sat, Jan 07 2006, Mark v Wolher wrote:
> >
> >>Hiya all,
> >>
> >>I was just playing a cd as usual and i noticed suddenly the errors
> >>below, they repeated like 8 times.
> >>
> >>kernel: 2.6.14.5
> >
> >
> > Should be fixed in newer 2.6.14.x, and in 2.6.15.
> >
>
> Looks like it isn't :( , well in 2.6.14.5

Oh, indeed. 2.6.15 has it fixed though. For 2.6.14.5 you have two
choices:

1) Delete the warning from as-iosched.c. It's harmless, it doesn't
indicate a bug in this case.

2) Apply this attached patch to prevent cdrom.c from reusing a request
when doing single frame cdda dma.

diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 1539603..7540d27 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2089,7 +2089,7 @@ static int cdrom_read_cdda_bpc(struct cd
int lba, int nframes)
{
request_queue_t *q = cdi->disk->queue;
- struct request *rq;
+ struct request *rq = NULL;
struct bio *bio;
unsigned int len;
int nr, ret = 0;
@@ -2097,13 +2097,13 @@ static int cdrom_read_cdda_bpc(struct cd
if (!q)
return -ENXIO;

- rq = blk_get_request(q, READ, GFP_KERNEL);
- if (!rq)
- return -ENOMEM;
-
cdi->last_sense = 0;

while (nframes) {
+ rq = blk_get_request(q, READ, GFP_KERNEL);
+ if (!rq)
+ return -ENOMEM;
+
nr = nframes;
if (cdi->cdda_method == CDDA_BPC_SINGLE)
nr = 1;
@@ -2151,9 +2151,13 @@ static int cdrom_read_cdda_bpc(struct cd
nframes -= nr;
lba += nr;
ubuf += len;
+ blk_put_request(rq);
+ rq = NULL;
}

- blk_put_request(rq);
+ if (rq)
+ blk_put_request(rq);
+
return ret;
}


--
Jens Axboe

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