|
@@ -327,7 +327,7 @@ static void drop_anon_vma(struct rmap_item *rmap_item)
|
|
|
|
|
|
if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->lock)) {
|
|
if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->lock)) {
|
|
int empty = list_empty(&anon_vma->head);
|
|
int empty = list_empty(&anon_vma->head);
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
if (empty)
|
|
if (empty)
|
|
anon_vma_free(anon_vma);
|
|
anon_vma_free(anon_vma);
|
|
}
|
|
}
|
|
@@ -1566,7 +1566,7 @@ again:
|
|
struct anon_vma_chain *vmac;
|
|
struct anon_vma_chain *vmac;
|
|
struct vm_area_struct *vma;
|
|
struct vm_area_struct *vma;
|
|
|
|
|
|
- spin_lock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_lock(anon_vma);
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
vma = vmac->vma;
|
|
vma = vmac->vma;
|
|
if (rmap_item->address < vma->vm_start ||
|
|
if (rmap_item->address < vma->vm_start ||
|
|
@@ -1589,7 +1589,7 @@ again:
|
|
if (!search_new_forks || !mapcount)
|
|
if (!search_new_forks || !mapcount)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
if (!mapcount)
|
|
if (!mapcount)
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
@@ -1619,7 +1619,7 @@ again:
|
|
struct anon_vma_chain *vmac;
|
|
struct anon_vma_chain *vmac;
|
|
struct vm_area_struct *vma;
|
|
struct vm_area_struct *vma;
|
|
|
|
|
|
- spin_lock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_lock(anon_vma);
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
vma = vmac->vma;
|
|
vma = vmac->vma;
|
|
if (rmap_item->address < vma->vm_start ||
|
|
if (rmap_item->address < vma->vm_start ||
|
|
@@ -1637,11 +1637,11 @@ again:
|
|
ret = try_to_unmap_one(page, vma,
|
|
ret = try_to_unmap_one(page, vma,
|
|
rmap_item->address, flags);
|
|
rmap_item->address, flags);
|
|
if (ret != SWAP_AGAIN || !page_mapped(page)) {
|
|
if (ret != SWAP_AGAIN || !page_mapped(page)) {
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
}
|
|
}
|
|
if (!search_new_forks++)
|
|
if (!search_new_forks++)
|
|
goto again;
|
|
goto again;
|
|
@@ -1671,7 +1671,7 @@ again:
|
|
struct anon_vma_chain *vmac;
|
|
struct anon_vma_chain *vmac;
|
|
struct vm_area_struct *vma;
|
|
struct vm_area_struct *vma;
|
|
|
|
|
|
- spin_lock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_lock(anon_vma);
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
list_for_each_entry(vmac, &anon_vma->head, same_anon_vma) {
|
|
vma = vmac->vma;
|
|
vma = vmac->vma;
|
|
if (rmap_item->address < vma->vm_start ||
|
|
if (rmap_item->address < vma->vm_start ||
|
|
@@ -1688,11 +1688,11 @@ again:
|
|
|
|
|
|
ret = rmap_one(page, vma, rmap_item->address, arg);
|
|
ret = rmap_one(page, vma, rmap_item->address, arg);
|
|
if (ret != SWAP_AGAIN) {
|
|
if (ret != SWAP_AGAIN) {
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- spin_unlock(&anon_vma->lock);
|
|
|
|
|
|
+ anon_vma_unlock(anon_vma);
|
|
}
|
|
}
|
|
if (!search_new_forks++)
|
|
if (!search_new_forks++)
|
|
goto again;
|
|
goto again;
|