Re: [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix

Andrea Arcangeli
2004-03-26T17:58:42Z

On Fri, Mar 26, 2004 at 10:43:17AM -0500, Rajesh Venkatasubramanian wrote:
>
> Hi Andrea,
>
> There is a problem with the prio_tree merge. As usual it is
> related to VM_NONLINEAR. When I was reading Hugh's nonlinear
> patch, I recalled this problem.
>
> Currently, with the prio_tree search in try_to_unmap, you will
> not check all the nonlinear vmas. Earlier, with a list walk it
> was not a problem. But, now in try_to_unmap we only select vmas
> that map a given page. That's meaningless for nonlinear vmas.
>
> I think the fix is straight-forward. My plan is to add a
> "list_head i_mmap_nonlinear" to the address_space and use the
> list to find all nonlinear vmas in try_to_unmap_inode.
>
> In sys_remap_file_pages, we can do something like below:
>
> if (!(vma->vm_flags & VM_NONLINEAR)) { /* vma is not already nonlinear */
> __vma_prio_tree_remove(&mapping->i_mmap_shared, vma)
> list_add_tail(&vma->shared.vm_set.list,
> &mapping->i_mmap_nonlinear);
> }
>
> Urggh. That forces us to take i_shared_sem in sys_remap_file_pages.
>
> Please let me know if you have any better idea. Otherwise, tonite
> I will send you a patch for 2.6.5-rc2-aa4.

I agree this will fix it. If a better fix comes to mind I will let you
know, in the meantime this fix will be welcome (despite the i_mmap_sem
in remap_file_pages) and I will merge it in the next prio-tree patch.
Thanks!