Tejun Heo <tj@xxxxxxxxxx> wrote: > blkdev_dequeue_request() and elv_dequeue_request() are equivalent and > both start the timeout timer. Barrier code dequeues the original > barrier request but doesn't passes the request itself to lower level > driver, only broken down proxy requests; however, as the original > barrier code goes through the same dequeue path and timeout timer is > started on it. If barrier sequence takes long enough, this timer > expires but the low level driver has no idea about this request and > oops follows. > > Timeout timer shouldn't have been started on the original barrier > request as it never goes through actual IO. This patch unexports > elv_dequeue_request(), which has no external user anyway, and makes it > operate on elevator proper w/o adding the timer and make > blkdev_dequeue_request() call elv_dequeue_request() and add timer. > Internal users which don't pass the request to driver - barrier code > and end_that_request_last() - are converted to use > elv_dequeue_request(). > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Mike Anderson <andmike@xxxxxxxxxxxxxxxxxx> > --- > Mike, this should fix the problem you were seeing (blk_add_timer on > requests w/o REQ_STARTED set). > Yes this fixed the "w/o REQ_STARTED" error I was seeing on a distro kernel and a mainline system. Thanks, -andmike -- Michael Anderson andmike@xxxxxxxxxxxxxxxxxx -- 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