On Fri, May 1, 2026 at 10:57 PM Matthew Wilcox <[email protected]> wrote: > > On Fri, May 01, 2026 at 06:49:58AM +0800, Barry Song wrote: > > 1. There is no deterministic latency for I/O completion. It depends on > > both the hardware and the software stack (bio/request queues and the > > block scheduler). Sometimes the latency is short; at other times it can > > be quite long. In such cases, a high-priority thread performing operations > > such as mprotect, unmap, prctl_set_vma, or madvise may be forced to wait > > for an unpredictable amount of time. > > But does that actually happen? I find it hard to believe that thread A > unmaps a VMA while thread B is in the middle of taking a page fault in > that same VMA. mprotect() and madvise() are more likely to happen, but > it still seems really unlikely to me.
It doesn’t have to involve unmapping or applying mprotect to the entire VMA—just a portion of it is sufficient. BTW, the chain can propagate: a page fault occurs, B wants to write this VMA, and C (a higher-priority task) wants to write another VMA. D may need to iterate VMAs under mmap_lock, so B can end up blocking both C and D.
