projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vm_is_stack: use for_each_thread() rather then buggy while_each_thread()
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
mm
/
rmap.c
diff --git
a/mm/rmap.c
b/mm/rmap.c
index
5d91bb7
..
cdbd312
100644
(file)
--- a/
mm/rmap.c
+++ b/
mm/rmap.c
@@
-103,6
+103,7
@@
static inline void anon_vma_free(struct anon_vma *anon_vma)
* LOCK should suffice since the actual taking of the lock must
* happen _before_ what follows.
*/
* LOCK should suffice since the actual taking of the lock must
* happen _before_ what follows.
*/
+ might_sleep();
if (rwsem_is_locked(&anon_vma->root->rwsem)) {
anon_vma_lock_write(anon_vma);
anon_vma_unlock_write(anon_vma);
if (rwsem_is_locked(&anon_vma->root->rwsem)) {
anon_vma_lock_write(anon_vma);
anon_vma_unlock_write(anon_vma);
@@
-426,8
+427,9
@@
struct anon_vma *page_get_anon_vma(struct page *page)
* above cannot corrupt).
*/
if (!page_mapped(page)) {
* above cannot corrupt).
*/
if (!page_mapped(page)) {
+ rcu_read_unlock();
put_anon_vma(anon_vma);
put_anon_vma(anon_vma);
-
anon_vma =
NULL;
+
return
NULL;
}
out:
rcu_read_unlock();
}
out:
rcu_read_unlock();
@@
-477,9
+479,9
@@
struct anon_vma *page_lock_anon_vma_read(struct page *page)
}
if (!page_mapped(page)) {
}
if (!page_mapped(page)) {
+ rcu_read_unlock();
put_anon_vma(anon_vma);
put_anon_vma(anon_vma);
- anon_vma = NULL;
- goto out;
+ return NULL;
}
/* we pinned the anon_vma, its safe to sleep */
}
/* we pinned the anon_vma, its safe to sleep */