|
@@ -314,7 +314,7 @@ void __init anon_vma_init(void)
|
|
|
* Getting a lock on a stable anon_vma from a page off the LRU is
|
|
* Getting a lock on a stable anon_vma from a page off the LRU is
|
|
|
* tricky: page_lock_anon_vma rely on RCU to guard against the races.
|
|
* tricky: page_lock_anon_vma rely on RCU to guard against the races.
|
|
|
*/
|
|
*/
|
|
|
-struct anon_vma *page_lock_anon_vma(struct page *page)
|
|
|
|
|
|
|
+struct anon_vma *__page_lock_anon_vma(struct page *page)
|
|
|
{
|
|
{
|
|
|
struct anon_vma *anon_vma, *root_anon_vma;
|
|
struct anon_vma *anon_vma, *root_anon_vma;
|
|
|
unsigned long anon_mapping;
|
|
unsigned long anon_mapping;
|
|
@@ -348,6 +348,8 @@ struct anon_vma *page_lock_anon_vma(struct page *page)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void page_unlock_anon_vma(struct anon_vma *anon_vma)
|
|
void page_unlock_anon_vma(struct anon_vma *anon_vma)
|
|
|
|
|
+ __releases(&anon_vma->root->lock)
|
|
|
|
|
+ __releases(RCU)
|
|
|
{
|
|
{
|
|
|
anon_vma_unlock(anon_vma);
|
|
anon_vma_unlock(anon_vma);
|
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|