On Fri, Dec 13, 2024 at 1:57 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > On Thu, Dec 12, 2024 at 08:48:52PM -0800, Suren Baghdasaryan wrote: > > > I'm not sure if this is the best way to deal with this circular > > dependency. Any other ideas? > > Move the waiting into an out-of-line slow-path? > > if (atomic_read(&vma->refcnt) != 2) > __vma_write_start_wait(mm, vma); The problem is not a function but the addition of struct rcuwait into struct mm_struct. The type should be known and I don't want to add it via a pointer to avoid extra dereferences. After thinking it over, I think the simplest way would be to move the definition of struct rcuwait into a separate header and include that header in mm_types.h. That, with some uninlining like you suggested, should do the trick. > > or somesuch..