Currently VMAs are split, shrunk, merged, moved, copy on write, and copied all in an attempt to do a relatively simple task of keeping track of a list of memory segments. There is a cache, a tree, and a linked list of VMAs in each MM. There is also a reverse mapping from PTEs to VMAs. We have arrived to a point where there is enough lock contention and complications on handling these seemingly simple data structures that it may be time to rethink how a VMA is tracked and modified. I'll have more patches closer to the conference. Thanks, Liam