Messages in this thread | | | Date | Tue, 03 Feb 2015 16:24:55 -0700 | From | Jens Axboe <> | Subject | Re: [GIT PULL] aio: fix sleeping while TASK_INTERRUPTIBLE |
| |
On 02/03/2015 04:55 AM, Peter Zijlstra wrote: > On Tue, Feb 03, 2015 at 12:33:48PM +0100, Peter Zijlstra wrote: >>> block/bsg.c- prepare_to_wait(&bd->wq_done, &wait, TASK_UNINTERRUPTIBLE); >>> block/bsg.c- spin_unlock_irq(&bd->lock); >>> block/bsg.c: io_schedule(); >>> block/bsg.c- finish_wait(&bd->wq_done, &wait); >>> >>> Which is double buggy because: >>> 1) it doesn't loop >>> 2) it sets TASK_UNINTERRUPTIBLE _after_ testing for the sleep event. >> >> OK, actually had a look at this one; it might be ok. >> >> The spinlock might fully serialize the state so no fails, and the entire >> function is called in a loop. Still seriously obtuse code. > > Jens, would something like the below work for you?
Yes, from a cursory look, that seems fine to me. Though I will hold the fact that you label my code as 'seriously obtuse' against you. Some day.
I can pull this in for testing for 3.20. Mind sending a properly formatted patch (signed off, commit message, all that stuff)?
-- Jens Axboe
| |