diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2014-12-12 19:54:27 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-13 15:42:45 -0500 |
commit | 3dec0ba0be6a532cac949e02b853021bf6d57dad (patch) | |
tree | 1b93971a14bc6038bd2b22a6bad16e0961cc46f9 /mm | |
parent | c8c06efa8b552608493b7066c234cfa82c47fcea (diff) |
mm/rmap: share the i_mmap_rwsem
Similarly to the anon memory counterpart, we can share the mapping's lock
ownership as the interval tree is not modified when doing doing the walk,
only the file page.
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: "Kirill A. Shutemov" <kirill@shutemov.name>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Acked-by: Mel Gorman <mgorman@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/rmap.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -1690,7 +1690,8 @@ static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc) | |||
1690 | 1690 | ||
1691 | if (!mapping) | 1691 | if (!mapping) |
1692 | return ret; | 1692 | return ret; |
1693 | i_mmap_lock_write(mapping); | 1693 | |
1694 | i_mmap_lock_read(mapping); | ||
1694 | vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) { | 1695 | vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) { |
1695 | unsigned long address = vma_address(page, vma); | 1696 | unsigned long address = vma_address(page, vma); |
1696 | 1697 | ||
@@ -1711,9 +1712,8 @@ static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc) | |||
1711 | goto done; | 1712 | goto done; |
1712 | 1713 | ||
1713 | ret = rwc->file_nonlinear(page, mapping, rwc->arg); | 1714 | ret = rwc->file_nonlinear(page, mapping, rwc->arg); |
1714 | |||
1715 | done: | 1715 | done: |
1716 | i_mmap_unlock_write(mapping); | 1716 | i_mmap_unlock_read(mapping); |
1717 | return ret; | 1717 | return ret; |
1718 | } | 1718 | } |
1719 | 1719 | ||