Messages in this thread |  | | | Date | Tue, 23 Feb 2010 18:12:29 +0000 | | From | Alasdair G Kergon <> | | Subject | Re: [Stable-review] [93/93] dm mpath: fix stall when requeueing io |
| |
On Mon, Feb 22, 2010 at 07:16:34PM +0900, Kiyoshi Ueda wrote: > On 02/22/2010 01:07 AM +0900, Stefan Bader wrote: > >> @@ -1568,12 +1575,16 @@ static void dm_request_fn(struct request > >> > >> blk_start_request(rq); > >> spin_unlock(q->queue_lock); > >> - map_request(ti, rq, md); > >> + if (map_request(ti, rq, md)) > >> + goto requeued; > >> spin_lock_irq(q->queue_lock); > >> } > In the current device-mapper code, I would like to go with > spin_unlock/lock here. > However, there was a case to enable irq in map_requst() for request > allocation, and this spin_lock_irq was a work-around for the case. > Now, there is no such case in the device-mapper code, so spin_lock should > be enough here. But I'm still using spin_lock_irq for safeness, since > there might be some more cases to enable irq during request submission > to underlying devices. > I'll remove the _irq in the future after lots of testings.
So, have I understood your reasoning?
- This function (dm_request_fn) is always called with local interrupts disabled. E.g. from generic_unplug_device() or blk_run_queue().
- The 'map_request()' function was found to re-enable interrupts in one case, but that case got fixed.
- The code still uses spin_lock_irq to ensure they remain disabled as protection against there being other cases. This should be changed to spin_lock as a clean-up but you are not aware of any current breakage.
Alasdair
|  |