On Nov 03 Tejun Heo wrote: > blk_cleanup_queue() may be called before elevator is set up on a > queue which triggers the following oops. [...] > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -407,8 +407,13 @@ void blk_cleanup_queue(struct request_queue *q) > spin_unlock_irq(lock); > mutex_unlock(&q->sysfs_lock); > > - /* drain all requests queued before DEAD marking */ > - blk_drain_queue(q, true); > + /* > + * Drain all requests queued before DEAD marking. The caller might > + * be trying to tear down @q before its elevator is initialized, in > + * which case we don't want to call into draining. > + */ > + if (q->elevator) > + blk_drain_queue(q, true); > > /* @q won't process any more request, flush async actions */ > del_timer_sync(&q->backing_dev_info.laptop_mode_wb_timer); What prevents elevator_attach to be called and requests to be inserted between 'if (q-elevator)' and 'blk_put_queue(q)'? -- Stefan Richter -=====-==-== =-== --=-- http://arcgraph.de/sr/ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html