On 7/8/25 01:10, Suren Baghdasaryan wrote: >>> + rcu_read_unlock(); >>> + vma = lock_vma_under_mmap_lock(mm, iter, address); >>> + rcu_read_lock(); >> OK I guess we hold the RCU lock the whole time as we traverse except when >> we lock under mmap lock. > Correct.
I wonder if it's really necessary? Can't it be done just inside lock_next_vma()? It would also avoid the unlock/lock dance quoted above. Even if we later manage to extend this approach to smaps and employ rcu locking to traverse the page tables, I'd think it's best to separate and fine-grain the rcu lock usage for vma iterator and page tables, if only to avoid too long time under the lock.