Re: get_page() vs __split_huge_page_refcount()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Michel,

On Thu, Mar 24, 2011 at 10:00:16PM -0700, Michel Lespinasse wrote:
> My question is this: After someone obtains a page reference using
> get_user_pages(), what prevents them from getting additional
> references with get_page() ? I always thought it was legal to
> duplicate references that way, but now I don't see how it'd be safe
> doing so on anon pages with THP enabled.

It's not legal anymore as you noticed, but I'm not aware of anything
doing that. I don't see an useful case where a driver could need to
take one extra refcount after GUP returned. The normal API is
GUP/put_page. We could make it legal again by taking the compound_lock
after a PageCompound check though. I hope it's not needed though. It's
unavoidable in put_page because put_page will run out of order with
regard to __split_huge_page_refcount. But serializing get_page in GUP
against __split_huge_page_refcount is automatic through the
pmd_trans_splitting bit and needed for all page table walkers anyway.

Maybe it's good idea to add a comment to transhuge.txt about that? I
don't think I added it.

Grepping for get_page in drivers doesn't show too many, they mostly
run through the vm_ops->fault handler. Most important I can't see how
possibly it could be useful to run a get_page after
get_user_pages(FOLL_GET) returns.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]