diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2014-12-12 19:55:04 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-13 15:42:46 -0500 |
commit | b258d860652934b5e014408302335430b81bd7ce (patch) | |
tree | 2c6735a682f865dec8cb85504b4667fe219112dc | |
parent | 2847cf95c68fa5fa391c58a669e761c4b0c8fc57 (diff) |
mm/rmap: calculate page offset when needed
Call page_to_pgoff() to get the page offset once we are sure we actually
need it, and any very obvious initial function checks have passed.
Trivial micro-optimization, and potentially save some cycles.
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/rmap.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1635,7 +1635,7 @@ static struct anon_vma *rmap_walk_anon_lock(struct page *page, | |||
1635 | static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc) | 1635 | static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc) |
1636 | { | 1636 | { |
1637 | struct anon_vma *anon_vma; | 1637 | struct anon_vma *anon_vma; |
1638 | pgoff_t pgoff = page_to_pgoff(page); | 1638 | pgoff_t pgoff; |
1639 | struct anon_vma_chain *avc; | 1639 | struct anon_vma_chain *avc; |
1640 | int ret = SWAP_AGAIN; | 1640 | int ret = SWAP_AGAIN; |
1641 | 1641 | ||
@@ -1643,6 +1643,7 @@ static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc) | |||
1643 | if (!anon_vma) | 1643 | if (!anon_vma) |
1644 | return ret; | 1644 | return ret; |
1645 | 1645 | ||
1646 | pgoff = page_to_pgoff(page); | ||
1646 | anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root, pgoff, pgoff) { | 1647 | anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root, pgoff, pgoff) { |
1647 | struct vm_area_struct *vma = avc->vma; | 1648 | struct vm_area_struct *vma = avc->vma; |
1648 | unsigned long address = vma_address(page, vma); | 1649 | unsigned long address = vma_address(page, vma); |
@@ -1676,7 +1677,7 @@ static int rmap_walk_anon(struct page *page, struct rmap_walk_control *rwc) | |||
1676 | static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc) | 1677 | static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc) |
1677 | { | 1678 | { |
1678 | struct address_space *mapping = page->mapping; | 1679 | struct address_space *mapping = page->mapping; |
1679 | pgoff_t pgoff = page_to_pgoff(page); | 1680 | pgoff_t pgoff; |
1680 | struct vm_area_struct *vma; | 1681 | struct vm_area_struct *vma; |
1681 | int ret = SWAP_AGAIN; | 1682 | int ret = SWAP_AGAIN; |
1682 | 1683 | ||
@@ -1691,6 +1692,7 @@ static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc) | |||
1691 | if (!mapping) | 1692 | if (!mapping) |
1692 | return ret; | 1693 | return ret; |
1693 | 1694 | ||
1695 | pgoff = page_to_pgoff(page); | ||
1694 | i_mmap_lock_read(mapping); | 1696 | i_mmap_lock_read(mapping); |
1695 | vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) { | 1697 | vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) { |
1696 | unsigned long address = vma_address(page, vma); | 1698 | unsigned long address = vma_address(page, vma); |