All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Dalecki <dalecki@evision-ventures.com>
To: Zwane Mwaikambo <zwane@linux.realnet.co.sz>
Cc: Linux Kernel <linux-kernel@vger.kernel.org>, Jens Axboe <axboe@suse.de>
Subject: Re: [PATCH][2.5] BUG check in elevator.c:237
Date: Fri, 08 Mar 2002 12:59:18 +0100	[thread overview]
Message-ID: <3C88A796.2070301@evision-ventures.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0203081258500.5383-100000@netfinity.realnet.co.sz>

Please let me elaborate a bit on this, to give you may be
some hints about where to look for an actual solution of
the problem:

Zwane Mwaikambo wrote:
> Please refer to Subject [PANIC] 2.5.5-pre1 elevator.c for more detailed 
> explanation.
> 
> I don't really like this patch mainly because it _really_ feels like a 
> bandaid for a larger problem in ide-cd, namely it violating the ide 
> layers command requirements. But it does stop my box from oopsing and 
> lets it finish the "dd" i was doing. Oops is at the end.
> 
> diffed against 2.5.6-pre3 (one down 2 quadrillion to go ;)
> 
> --- linux-2.5.6-pre/drivers/ide/ide-cd.c.orig	Fri Mar  8 12:09:10 2002
> +++ linux-2.5.6-pre/drivers/ide/ide-cd.c	Fri Mar  8 12:04:08 2002
> @@ -666,9 +666,11 @@
>  			cdrom_end_request(drive, 0);
>  		}
>  
> -		/* If we got a CHECK_CONDITION status,
> -		   queue a request sense command. */
> -		if ((stat & ERR_STAT) != 0)
> +		/* If we got a CHECK_CONDITION status, queue a request sense command,
> +		   however if we're generating spurious errors, make sure we don't
> +		   attempt to queue an an already started request.
> +		*/
> +		if (((stat & ERR_STAT) != 0) && !(rq->flags & REQ_STARTED))
>  			cdrom_queue_request_sense(drive, NULL, NULL, NULL);
>  	} else
>  		blk_dump_rq_flags(rq, "ide-cd bad flags");
> 

After having a look at the oops I think that this may be very well a
symptom of another problem in the ide-cd.c drivers overall
way of working. Please let me elaborate a bit.

In ide.c there is one central interrupt handler, namely:

void ide_timer_expiry(unsigned long data)

This function is called upon finish of every command.

However for cd-rom there are commands, which can
take quite a long time. Therefore there is the possiblity there
to provide a polling function, which will be engaged after the
interrupt happens in the above function:

	/* continue */
				if ((wait = expiry(drive)) != 0) {
					/* reengage timer */
					hwgroup->timer.expires  = jiffies + wait;
					add_timer(&hwgroup->timer);
					spin_unlock_irqrestore(&ide_lock, flags);
					return;
				}
And plase guess whot? CD-ROM is the only driver which is using
this facility. Please have a look at the last
argument of ide_set_handler(). The second argument is the
interrutp handler for a command. The third is supposed to be
the poll timerout function. But if you look at the
actual poll function found in ide-cd.c (and only there).
You may as well feel to try to just execute its commands directly in
ide_timer_expiry, thus reducing tons of possible races ind the
overall intr handling found currently there.


  reply	other threads:[~2002-03-08 12:01 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-03-08 11:00 [PATCH][2.5] BUG check in elevator.c:237 Zwane Mwaikambo
2002-03-08 11:59 ` Martin Dalecki [this message]
2002-03-08 11:57   ` Zwane Mwaikambo
2002-03-08 12:19     ` Zwane Mwaikambo
2002-03-08 12:36     ` Martin Dalecki
2002-03-08 12:29       ` Zwane Mwaikambo
2002-03-08 12:49         ` Martin Dalecki
2002-03-08 12:50           ` Zwane Mwaikambo
2002-03-08 13:57             ` Martin Dalecki
2002-03-11  9:44   ` Jens Axboe
2002-03-11 10:22     ` Martin Dalecki
2002-03-11 11:13       ` Andre Hedrick

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=3C88A796.2070301@evision-ventures.com \
    --to=dalecki@evision-ventures.com \
    --cc=axboe@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zwane@linux.realnet.co.sz \
    /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.