Re: exception in interrupt during elv_completed_request. (3.0)

From: James Bottomley
Date: Tue Aug 09 2011 - 09:57:26 EST


On Tue, 2011-08-09 at 08:48 -0400, Dave Jones wrote:
> On Mon, Aug 08, 2011 at 10:43:23PM -0700, Greg Kroah-Hartman wrote:
> > On Mon, Aug 08, 2011 at 05:16:09PM +0200, Jens Axboe wrote:
> > > On 2011-08-08 17:13, Dave Jones wrote:
> > > > > On 2011-08-08 16:58, Dave Jones wrote:
> > > > > > Jens,
> > > > > >
> > > > > > We got a report of a panic from a user when he plugged in his usb drive,
> > > > > > https://bugzilla.redhat.com/attachment.cgi?id=517141
> > > > > >
> > > > > > any ideas what happened here ?
> > > > >
> > > > > 2.6.40?
> > > >
> > > > it's 3.0 in all but name. didn't want to risk breaking dumb userspace
> > > > in an update for older fedora releases. It does have the
> > > > scsi_dispatch_cmd fix that went into 3.0.1, but otherwise block/
> > > > should be stock 3.0
> > >
> > > OK
> > >
> > > > > Looks like the recent SCSI removal oopses, perhaps it happened when he
> > > > > yanked it instead of directly on insertion?
> > > >
> > > > sorry my bad, yes, this was on device removal.
> > > >
> > > > according to the user, he did everything right, and unmounted safely.
> > > > https://bugzilla.redhat.com/show_bug.cgi?id=728872
> > >
> > > James?
> >
> > Should be resolved in 3.0.1 now.
> >
> > If not, please let James, and me, know.
>
> Are you talking about the scsi_dispatch_cmd fix ? this is something else.

I'm not so sure ... it looks like a stray block put coming after queue
teardown to me. elevator_exit() will NULL e->ops but blk_put_request()
uses it unconditionally.

That's more a fix like this, isn't it?

James

---

diff --git a/block/elevator.c b/block/elevator.c
index a3b64bc..de4bde9 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -812,7 +812,7 @@ void elv_completed_request(struct request_queue *q, struct request *rq)
*/
if (blk_account_rq(rq)) {
q->in_flight[rq_is_sync(rq)]--;
- if ((rq->cmd_flags & REQ_SORTED) &&
+ if ((rq->cmd_flags & REQ_SORTED) && e->ops &&
e->ops->elevator_completed_req_fn)
e->ops->elevator_completed_req_fn(q, rq);
}


--
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/