Removing request from I/O scheduler queue

From: Swetha Krishnan
Date: Tue Feb 27 2007 - 02:47:43 EST


I'm using linux 2.6.12 within user-mode linux. I need to remove a specific I/O request (that I have means to identify) from the I/O scheduler queues instead of moving it to the driver dispatch queue.
To remove a request from the anticipatory scheduler's sort/fifo queues , I'm making a call to as_remove_queued_request(), from within as_move_to_dispatch(). Before removing it, I invoke the as_find_next_arq() function so that the scheduler can pick the next request once this one is removed.
Everything works fine as far as the remove is concerned, but after returning from the remove function and the end_io function that I call on the request's bio field(a dummy end_io), the scheduler fails to proceed with the next request chosen. I do check that if the next req chosen is NULL, I exit from the as_move_to_dispatch() function but even if I do this, the kernel panics after exiting from that function.

The chief points of panic from the (larger) dump, seems to be
a02277d0: [<a005eec3>] handle_IRQ_event+0x37/0x8c
a0227800: [<a005efaf>] __do_IRQ+0x97/0xe0
a0227820: [<a000defc>] do_IRQ+0x30/0x3c

Could you give me any pointers as to why this is happening? Is there any additional cleanup that I need to do when I remove a request from the scheduler's queues that as_remove_queued_request() does not already do?

I am rather new to linux I/O scheduling, so would be great if you could let me know if there something basic I'm missing here.

Thanks,
Swetha.


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