|
@@ -1757,7 +1757,7 @@ static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc,
|
|
|
bool locked)
|
|
|
{
|
|
|
struct anon_vma *anon_vma;
|
|
|
- pgoff_t pgoff;
|
|
|
+ pgoff_t pgoff_start, pgoff_end;
|
|
|
struct anon_vma_chain *avc;
|
|
|
int ret = SWAP_AGAIN;
|
|
|
|
|
@@ -1771,8 +1771,10 @@ static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc,
|
|
|
if (!anon_vma)
|
|
|
return ret;
|
|
|
|
|
|
- pgoff = page_to_pgoff(page);
|
|
|
- anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root, pgoff, pgoff) {
|
|
|
+ pgoff_start = page_to_pgoff(page);
|
|
|
+ pgoff_end = pgoff_start + hpage_nr_pages(page) - 1;
|
|
|
+ anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root,
|
|
|
+ pgoff_start, pgoff_end) {
|
|
|
struct vm_area_struct *vma = avc->vma;
|
|
|
unsigned long address = vma_address(page, vma);
|
|
|
|
|
@@ -1810,7 +1812,7 @@ static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc,
|
|
|
bool locked)
|
|
|
{
|
|
|
struct address_space *mapping = page_mapping(page);
|
|
|
- pgoff_t pgoff;
|
|
|
+ pgoff_t pgoff_start, pgoff_end;
|
|
|
struct vm_area_struct *vma;
|
|
|
int ret = SWAP_AGAIN;
|
|
|
|
|
@@ -1825,10 +1827,12 @@ static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc,
|
|
|
if (!mapping)
|
|
|
return ret;
|
|
|
|
|
|
- pgoff = page_to_pgoff(page);
|
|
|
+ pgoff_start = page_to_pgoff(page);
|
|
|
+ pgoff_end = pgoff_start + hpage_nr_pages(page) - 1;
|
|
|
if (!locked)
|
|
|
i_mmap_lock_read(mapping);
|
|
|
- vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
|
|
|
+ vma_interval_tree_foreach(vma, &mapping->i_mmap,
|
|
|
+ pgoff_start, pgoff_end) {
|
|
|
unsigned long address = vma_address(page, vma);
|
|
|
|
|
|
cond_resched();
|