On Fri, Dec 13, 2024 at 10:37 AM Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > On Fri, Dec 13, 2024 at 10:35 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > On Fri, Dec 13, 2024 at 09:45:33AM -0800, Suren Baghdasaryan wrote: > > > 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 > > > > Durr, in my brain that was a struct task_struct pointer, totally forgot > > we had a type there. Yeah, as Willy says, move it to compiler_types.h or > > somesuch. > > Got it. Thank you both! I posted the implementation of the mechanism we discussed here at: https://lore.kernel.org/all/20241216192419.2970941-11-surenb@xxxxxxxxxx/ It ended up becoming a large patchset but most patches are very small logical units. Feedback is greatly appreciated!