Commit 48f2301c authored by Jan Kara's avatar Jan Kara Committed by Linus Torvalds
Browse files

hugetlbfs: use pagevec_lookup_range() in remove_inode_hugepages()

We want only pages from given range in remove_inode_hugepages().  Use
pagevec_lookup_range() instead of pagevec_lookup().

Link: http://lkml.kernel.org/r/20170726114704.7626-8-jack@suse.cz


Signed-off-by: default avatarJan Kara <jack@suse.cz>
Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
Cc: Nadia Yvette Chambers <nyc@holomorphy.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2b85a617
Loading
Loading
Loading
Loading
+2 −16
Original line number Original line Diff line number Diff line
@@ -403,7 +403,6 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
	struct pagevec pvec;
	struct pagevec pvec;
	pgoff_t next, index;
	pgoff_t next, index;
	int i, freed = 0;
	int i, freed = 0;
	long lookup_nr = PAGEVEC_SIZE;
	bool truncate_op = (lend == LLONG_MAX);
	bool truncate_op = (lend == LLONG_MAX);


	memset(&pseudo_vma, 0, sizeof(struct vm_area_struct));
	memset(&pseudo_vma, 0, sizeof(struct vm_area_struct));
@@ -411,31 +410,18 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
	pagevec_init(&pvec, 0);
	pagevec_init(&pvec, 0);
	next = start;
	next = start;
	while (next < end) {
	while (next < end) {
		/*
		 * Don't grab more pages than the number left in the range.
		 */
		if (end - next < lookup_nr)
			lookup_nr = end - next;

		/*
		/*
		 * When no more pages are found, we are done.
		 * When no more pages are found, we are done.
		 */
		 */
		if (!pagevec_lookup(&pvec, mapping, &next, lookup_nr))
		if (!pagevec_lookup_range(&pvec, mapping, &next, end - 1,
					  PAGEVEC_SIZE))
			break;
			break;


		for (i = 0; i < pagevec_count(&pvec); ++i) {
		for (i = 0; i < pagevec_count(&pvec); ++i) {
			struct page *page = pvec.pages[i];
			struct page *page = pvec.pages[i];
			u32 hash;
			u32 hash;


			/*
			 * The page (index) could be beyond end.  This is
			 * only possible in the punch hole case as end is
			 * max page offset in the truncate case.
			 */
			index = page->index;
			index = page->index;
			if (index >= end)
				break;

			hash = hugetlb_fault_mutex_hash(h, current->mm,
			hash = hugetlb_fault_mutex_hash(h, current->mm,
							&pseudo_vma,
							&pseudo_vma,
							mapping, index, 0);
							mapping, index, 0);