All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Polyakov <appro@fy.chalmers.se>
To: Jens Axboe <axboe@suse.de>
Cc: linux-kernel@vger.kernel.org, proski@gnu.org
Subject: Re: Regarding drivers/ide/ide-cd.c in 2.5.72
Date: Fri, 11 Jul 2003 15:26:29 +0200	[thread overview]
Message-ID: <3F0EBB05.E90B3DF2@fy.chalmers.se> (raw)
In-Reply-To: 20030619140735.GU6445@suse.de

> > > > ... In the nutshell the problem is that [as it is
> > > > now] every failed SG_IO request is replayed second time without data
> > > > transfer. ... Suggested patch
> > > > overcomes this problem by immediately purging the failed SG_IO request
> > > > from the request queue.
> > >
> > > Patch looks fine, care to resend actually trying to follow the style in
> > > the file in question?
> >
> > Revised to my best ability for follow the coding style of file in
> > question. A:-)
> 
> Much better, thanks :)

And it slipped through again:-( Sharpen up! BTW, the proposed patch
fixes even http://marc.theaimsgroup.com/?t=105634805100001&r=1&w=2,
where induced kernel crash occurs upon packet replay. Applicable to
up to 2.5.75. A.
8<--------8<--------8<--------8<--------8<--------8<--------8<--------
--- ./drivers/ide/ide-cd.c.orig	Tue Jun 17 06:20:00 2003
+++ ./drivers/ide/ide-cd.c	Thu Jun 19 15:56:39 2003
@@ -749,12 +749,17 @@
 		   by transferring the semaphore from the packet
 		   command request to the request sense request. */
 
+		rq->flags |= REQ_FAILED;
 		if ((stat & ERR_STAT) != 0) {
 			wait = rq->waiting;
 			rq->waiting = NULL;
+			if ((rq->flags & REQ_BLOCK_PC) != 0) {
+				cdrom_queue_request_sense(drive, wait,
+							  rq->sense, rq);
+				return 1; /* REQ_BLOCK_PC self-cares */
+			}
 		}
 
-		rq->flags |= REQ_FAILED;
 		cdrom_end_request(drive, 0);
 
 		if ((stat & ERR_STAT) != 0)
@@ -1657,13 +1662,14 @@
 	dma = info->dma;
 	if (dma) {
 		info->dma = 0;
-		if ((dma_error = HWIF(drive)->ide_dma_end(drive))) {
-			printk("ide-cd: dma error\n");
-			HWIF(drive)->ide_dma_off(drive);
-		}
+		dma_error = HWIF(drive)->ide_dma_end(drive);
 	}
 
 	if (cdrom_decode_status(drive, 0, &stat)) {
+		if ((stat & ERR_STAT) != 0) {
+			end_that_request_chunk(rq, 0, rq->data_len);
+			goto end_request; /* purge the whole thing... */
+		}
 		end_that_request_chunk(rq, 1, rq->data_len);
 		return ide_stopped;
 	}
@@ -1672,8 +1678,11 @@
 	 * using dma, transfer is complete now
 	 */
 	if (dma) {
-		if (dma_error)
+		if (dma_error) {
+			printk("ide-cd: dma error\n");
+			HWIF(drive)->ide_dma_off(drive);
 			return DRIVER(drive)->error(drive, "dma error", stat);
+		}
 
 		end_that_request_chunk(rq, 1, rq->data_len);
 		rq->data_len = 0;

  reply	other threads:[~2003-07-11 13:12 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-17 21:54 Regarding drivers/ide/ide-cd.c in 2.5.72 Andy Polyakov
2003-06-19 12:20 ` Jens Axboe
2003-06-19 14:12   ` Andy Polyakov
2003-06-19 14:07     ` Jens Axboe
2003-07-11 13:26       ` Andy Polyakov [this message]
2003-07-12 11:51         ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3F0EBB05.E90B3DF2@fy.chalmers.se \
    --to=appro@fy.chalmers.se \
    --cc=axboe@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=proski@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.