mm/shmem: use pagevec_lookup in shmem_unlock_mapping
The comment shows that the reason for using find_get_entries() is now stale; find_get_pages() will not return 0 if it hits a consecutive run of swap entries, and I don't believe it has since 2011. pagevec_lookup() is a simpler function to use than find_get_pages(), so use it instead. Link: https://lkml.kernel.org/r/20201112212641.27837-3-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: William Kucharski <william.kucharski@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Dave Chinner <dchinner@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Yang Shi <yang.shi@linux.alibaba.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c49f50d198
commit
96888e0ab0
11
mm/shmem.c
11
mm/shmem.c
@ -842,7 +842,6 @@ unsigned long shmem_swap_usage(struct vm_area_struct *vma)
|
|||||||
void shmem_unlock_mapping(struct address_space *mapping)
|
void shmem_unlock_mapping(struct address_space *mapping)
|
||||||
{
|
{
|
||||||
struct pagevec pvec;
|
struct pagevec pvec;
|
||||||
pgoff_t indices[PAGEVEC_SIZE];
|
|
||||||
pgoff_t index = 0;
|
pgoff_t index = 0;
|
||||||
|
|
||||||
pagevec_init(&pvec);
|
pagevec_init(&pvec);
|
||||||
@ -850,16 +849,8 @@ void shmem_unlock_mapping(struct address_space *mapping)
|
|||||||
* Minor point, but we might as well stop if someone else SHM_LOCKs it.
|
* Minor point, but we might as well stop if someone else SHM_LOCKs it.
|
||||||
*/
|
*/
|
||||||
while (!mapping_unevictable(mapping)) {
|
while (!mapping_unevictable(mapping)) {
|
||||||
/*
|
if (!pagevec_lookup(&pvec, mapping, &index))
|
||||||
* Avoid pagevec_lookup(): find_get_pages() returns 0 as if it
|
|
||||||
* has finished, if it hits a row of PAGEVEC_SIZE swap entries.
|
|
||||||
*/
|
|
||||||
pvec.nr = find_get_entries(mapping, index,
|
|
||||||
PAGEVEC_SIZE, pvec.pages, indices);
|
|
||||||
if (!pvec.nr)
|
|
||||||
break;
|
break;
|
||||||
index = indices[pvec.nr - 1] + 1;
|
|
||||||
pagevec_remove_exceptionals(&pvec);
|
|
||||||
check_move_unevictable_pages(&pvec);
|
check_move_unevictable_pages(&pvec);
|
||||||
pagevec_release(&pvec);
|
pagevec_release(&pvec);
|
||||||
cond_resched();
|
cond_resched();
|
||||||
|
Loading…
Reference in New Issue
Block a user