On Tue, Aug 22, 2017 at 11:56 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > Won't we now prematurely terminate the wait when we get a spurious > wakeup? I think there's two answers to that: (a) do we even care? (b) what spurious wakeup? The "do we even care" quesiton is because wait_on_page_bit by definition isn't really serializing. And I'm not even talking about memory ordering, altough that is true too - I'm talking just fundamentally, that by definition when we're not locking, by the time wait_on_page_bit() returns to the caller, it could obviously have changed again. So I think wait_on_page_bit() is by definition not really guaranteeing that the bit really is clear. And I don't think we have really have cases that matter. But if we do - say, 'fsync()' waiting for a page to wait for writeback, where would you get spurious wakeups from? They normally happen either when we have nested waiting (eg a page fault happens while we have other wait queues active), and I'm not seeing that being an issue here. That said, I do think we might want to perhaps make a "careful" vs "just wait a bit" version of this if the patch works out. The patch is primarily for testing this particular case. I actually think it's probably ok in general, but maybe there really is some special case that could have multiple wakeup sources and it needs to see *this* particular one. (We could perhaps handle that case by checking "is the wait-queue empty now" instead, and just get rid of the re-arming, not break out of the loop immediately after the io_schedule()). Linus -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>