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

Andrew Morton
2004-04-03T23:46:08Z

Andrea Arcangeli <andrea@suse.de> wrote:
>
> On Sat, Apr 03, 2004 at 12:02:27PM -0800, Andrew Morton wrote:
> > It might be better to switch over to address masking in get_user_pages()
> > and just dump all the compound page logic. I don't immediately see how the
>
> I'm all for it, this is how the 2.4 get_user_pages deals with bigpages
> too, I've never enjoyed the compound thing.
>
> > get_user_pages() caller can subsequently do put_page() against the correct
> > pageframe, but I assume you worked that out?
>
> see this patch:
>
> http://www.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.23aa2/9910_shm-largepage-18.gz
>
> it's a two liner fix in follow_page:
>
> @@ -439,6 +457,8 @@ static struct page * follow_page(struct
> pmd = pmd_offset(pgd, address);
> if (pmd_none(*pmd))
> goto out;
> + if (pmd_bigpage(*pmd))
> + return __pmd_page(*pmd) + (address & BIGPAGE_MASK) / PAGE_SIZE;

OK, that's an x86 solution. But this addresses the easy part - the messy
part happens where we want to unpin the pages at I/O completion in
bio_release_pages() when the page may not even be in a vma any more..