diff mbox

[31/35] shmem: Convert to pagevec_lookup_entries_range()

Message ID 20170601093245.29238-32-jack@suse.cz (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Kara June 1, 2017, 9:32 a.m. UTC
Convert radix tree scanners to use pagevec_lookup_entries_range() and
find_get_entries_range() since they all want only entries from given
range.

CC: Hugh Dickins <hughd@google.com>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 mm/shmem.c | 23 +++++++----------------
 1 file changed, 7 insertions(+), 16 deletions(-)

Comments

kernel test robot June 1, 2017, 1:55 p.m. UTC | #1
Hi Jan,

[auto build test WARNING on linus/master]
[also build test WARNING on v4.12-rc3]
[cannot apply to next-20170601]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Jan-Kara/pagevec-API-cleanups/20170601-200653
config: i386-randconfig-x078-06010927 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   Cyclomatic Complexity 1 include/linux/huge_mm.h:split_huge_page
   Cyclomatic Complexity 1 include/linux/radix-tree.h:radix_tree_insert
   Cyclomatic Complexity 10 mm/shmem.c:shmem_add_to_page_cache
   Cyclomatic Complexity 2 include/linux/highmem.h:clear_highpage
   Cyclomatic Complexity 1 mm/shmem.c:shmem_confirm_swap
   Cyclomatic Complexity 2 include/linux/mm.h:put_page
   Cyclomatic Complexity 7 mm/shmem.c:shmem_write_end
   Cyclomatic Complexity 4 mm/shmem.c:shmem_replace_page
   Cyclomatic Complexity 13 mm/shmem.c:shmem_unused_huge_shrink
   Cyclomatic Complexity 69 mm/shmem.c:shmem_getpage_gfp
   Cyclomatic Complexity 2 mm/shmem.c:shmem_unused_huge_scan
   Cyclomatic Complexity 1 mm/shmem.c:shmem_put_link
   Cyclomatic Complexity 11 mm/shmem.c:shmem_fault
   Cyclomatic Complexity 1 mm/shmem.c:synchronous_wake_function
   Cyclomatic Complexity 1 include/linux/sched.h:cond_resched_rcu
   Cyclomatic Complexity 5 mm/shmem.c:find_swap_entry
   Cyclomatic Complexity 2 include/linux/pagemap.h:linear_page_index
   Cyclomatic Complexity 2 include/linux/pagevec.h:pagevec_release
   Cyclomatic Complexity 1 include/linux/pagevec.h:pagevec_lookup
   Cyclomatic Complexity 2 include/linux/pagemap.h:page_to_pgoff
   Cyclomatic Complexity 2 mm/shmem.c:shmem_free_swap
   Cyclomatic Complexity 8 mm/shmem.c:shmem_unuse_inode
   Cyclomatic Complexity 1 include/linux/fs.h:inode_lock
   Cyclomatic Complexity 1 include/linux/fs.h:inode_unlock
   Cyclomatic Complexity 2 include/linux/fs.h:file_accessed
   Cyclomatic Complexity 7 include/linux/khugepaged.h:khugepaged_enter
   Cyclomatic Complexity 2 mm/shmem.c:shmem_mmap
   Cyclomatic Complexity 12 mm/shmem.c:shmem_seek_hole_data
   Cyclomatic Complexity 8 mm/shmem.c:shmem_file_llseek
   Cyclomatic Complexity 2 include/linux/uaccess.h:copy_user_overflow
   Cyclomatic Complexity 2 include/linux/mm.h:page_mapcount
   Cyclomatic Complexity 8 mm/shmem.c:shmem_tag_pins
   Cyclomatic Complexity 13 mm/shmem.c:shmem_wait_for_pins
   Cyclomatic Complexity 2 include/linux/xattr.h:simple_xattrs_free
   Cyclomatic Complexity 1 include/linux/xattr.h:simple_xattrs_init
   Cyclomatic Complexity 7 mm/shmem.c:shmem_show_options
   Cyclomatic Complexity 1 include/linux/percpu_counter.h:percpu_counter_sum
   Cyclomatic Complexity 3 mm/shmem.c:shmem_statfs
   Cyclomatic Complexity 2 mm/shmem.c:shmem_destroy_inode
   Cyclomatic Complexity 2 mm/shmem.c:shmem_destroy_callback
   Cyclomatic Complexity 2 mm/shmem.c:shmem_alloc_inode
   Cyclomatic Complexity 3 mm/shmem.c:shmem_fh_to_dentry
   Cyclomatic Complexity 4 mm/shmem.c:shmem_encode_fh
   Cyclomatic Complexity 7 mm/shmem.c:shmem_parse_huge
   Cyclomatic Complexity 8 mm/shmem.c:shmem_enabled_store
   Cyclomatic Complexity 94 mm/shmem.c:shmem_parse_options
   Cyclomatic Complexity 9 mm/shmem.c:shmem_remount_fs
   Cyclomatic Complexity 6 mm/shmem.c:shmem_get_inode
   Cyclomatic Complexity 4 mm/shmem.c:shmem_tmpfile
   Cyclomatic Complexity 3 mm/shmem.c:shmem_exchange
   Cyclomatic Complexity 3 mm/shmem.c:shmem_unlink
   Cyclomatic Complexity 2 mm/shmem.c:shmem_rmdir
   Cyclomatic Complexity 2 include/linux/dcache.h:dget
   Cyclomatic Complexity 4 mm/shmem.c:shmem_mknod
   Cyclomatic Complexity 3 mm/shmem.c:shmem_whiteout
   Cyclomatic Complexity 9 mm/shmem.c:shmem_rename2
   Cyclomatic Complexity 2 mm/shmem.c:shmem_mkdir
   Cyclomatic Complexity 1 mm/shmem.c:shmem_create
   Cyclomatic Complexity 2 mm/shmem.c:shmem_link
   Cyclomatic Complexity 2 mm/shmem.c:shmem_getattr
   Cyclomatic Complexity 1 mm/shmem.c:shmem_put_super
   Cyclomatic Complexity 7 mm/shmem.c:shmem_fill_super
   Cyclomatic Complexity 1 mm/shmem.c:shmem_mount
   Cyclomatic Complexity 1 mm/shmem.c:shmem_init_inodecache
   Cyclomatic Complexity 1 mm/shmem.c:shmem_init_inode
   Cyclomatic Complexity 1 mm/shmem.c:shmem_destroy_inodecache
   Cyclomatic Complexity 3 mm/shmem.c:shmem_enabled_show
   Cyclomatic Complexity 8 mm/shmem.c:__shmem_file_setup
   Cyclomatic Complexity 1 mm/shmem.c:shmem_getpage
   Cyclomatic Complexity 5 mm/shmem.c:shmem_write_begin
   Cyclomatic Complexity 36 mm/shmem.c:shmem_undo_range
   Cyclomatic Complexity 17 mm/shmem.c:shmem_file_read_iter
   Cyclomatic Complexity 8 mm/shmem.c:shmem_symlink
   Cyclomatic Complexity 5 mm/shmem.c:shmem_get_link
   Cyclomatic Complexity 1 mm/shmem.c:vma_is_shmem
   Cyclomatic Complexity 4 mm/shmem.c:shmem_charge
   Cyclomatic Complexity 2 mm/shmem.c:shmem_uncharge
   Cyclomatic Complexity 7 mm/shmem.c:shmem_partial_swap_usage
   Cyclomatic Complexity 4 mm/shmem.c:shmem_swap_usage
   Cyclomatic Complexity 3 mm/shmem.c:shmem_unlock_mapping
   Cyclomatic Complexity 1 mm/shmem.c:shmem_truncate_range
   Cyclomatic Complexity 19 mm/shmem.c:shmem_fallocate
   Cyclomatic Complexity 6 mm/shmem.c:shmem_evict_inode
   Cyclomatic Complexity 16 mm/shmem.c:shmem_setattr
   Cyclomatic Complexity 9 mm/shmem.c:shmem_unuse
   Cyclomatic Complexity 7 mm/shmem.c:shmem_lock
   Cyclomatic Complexity 1 mm/shmem.c:shmem_mapping
   Cyclomatic Complexity 16 mm/shmem.c:shmem_mcopy_atomic_pte
   Cyclomatic Complexity 9 mm/shmem.c:shmem_add_seals
   Cyclomatic Complexity 2 mm/shmem.c:shmem_get_seals
   Cyclomatic Complexity 3 mm/shmem.c:shmem_fcntl
   Cyclomatic Complexity 7 mm/shmem.c:shmem_init
   Cyclomatic Complexity 8 mm/shmem.c:shmem_huge_enabled
   Cyclomatic Complexity 1 mm/shmem.c:shmem_kernel_file_setup
   Cyclomatic Complexity 1 mm/shmem.c:shmem_file_setup
   Cyclomatic Complexity 11 mm/shmem.c:SYSC_memfd_create
   Cyclomatic Complexity 1 mm/shmem.c:SyS_memfd_create
   Cyclomatic Complexity 4 mm/shmem.c:shmem_zero_setup
   Cyclomatic Complexity 2 mm/shmem.c:shmem_read_mapping_page_gfp
   mm/shmem.c: In function 'shmem_seek_hole_data':
>> mm/shmem.c:2522:9: warning: 'last' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return last;
            ^~~~

vim +/last +2522 mm/shmem.c

220f2ac9 Hugh Dickins    2012-12-12  2506  			page = pvec.pages[i];
220f2ac9 Hugh Dickins    2012-12-12  2507  			if (page && !radix_tree_exceptional_entry(page)) {
220f2ac9 Hugh Dickins    2012-12-12  2508  				if (!PageUptodate(page))
220f2ac9 Hugh Dickins    2012-12-12  2509  					page = NULL;
220f2ac9 Hugh Dickins    2012-12-12  2510  			}
eb675e81 Jan Kara        2017-06-01  2511  			if ((page && whence == SEEK_DATA) ||
965c8e59 Andrew Morton   2012-12-17  2512  			    (!page && whence == SEEK_HOLE)) {
220f2ac9 Hugh Dickins    2012-12-12  2513  				done = true;
220f2ac9 Hugh Dickins    2012-12-12  2514  				break;
220f2ac9 Hugh Dickins    2012-12-12  2515  			}
220f2ac9 Hugh Dickins    2012-12-12  2516  		}
0cd6144a Johannes Weiner 2014-04-03  2517  		pagevec_remove_exceptionals(&pvec);
220f2ac9 Hugh Dickins    2012-12-12  2518  		pagevec_release(&pvec);
220f2ac9 Hugh Dickins    2012-12-12  2519  		pvec.nr = PAGEVEC_SIZE;
220f2ac9 Hugh Dickins    2012-12-12  2520  		cond_resched();
220f2ac9 Hugh Dickins    2012-12-12  2521  	}
1d162ad5 Jan Kara        2017-06-01 @2522  	return last;
220f2ac9 Hugh Dickins    2012-12-12  2523  }
220f2ac9 Hugh Dickins    2012-12-12  2524  
965c8e59 Andrew Morton   2012-12-17  2525  static loff_t shmem_file_llseek(struct file *file, loff_t offset, int whence)
220f2ac9 Hugh Dickins    2012-12-12  2526  {
220f2ac9 Hugh Dickins    2012-12-12  2527  	struct address_space *mapping = file->f_mapping;
220f2ac9 Hugh Dickins    2012-12-12  2528  	struct inode *inode = mapping->host;
220f2ac9 Hugh Dickins    2012-12-12  2529  	pgoff_t start, end;
220f2ac9 Hugh Dickins    2012-12-12  2530  	loff_t new_offset;

:::::: The code at line 2522 was first introduced by commit
:::::: 1d162ad5252576fa97d38e96e6e09fd9165f5d6b mm: Make pagevec_lookup_entries() update index

:::::: TO: Jan Kara <jack@suse.cz>
:::::: CC: 0day robot <fengguang.wu@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/mm/shmem.c b/mm/shmem.c
index f9c4afbdd70c..e5ea044aae24 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -768,16 +768,12 @@  static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
 	pagevec_init(&pvec, 0);
 	index = start;
 	while (index < end) {
-		if (!pagevec_lookup_entries(&pvec, mapping, &index,
-				min(end - index, (pgoff_t)PAGEVEC_SIZE),
-				indices))
+		if (!pagevec_lookup_entries_range(&pvec, mapping, &index,
+				end - 1, PAGEVEC_SIZE, indices))
 			break;
 		for (i = 0; i < pagevec_count(&pvec); i++) {
 			struct page *page = pvec.pages[i];
 
-			if (indices[i] >= end)
-				break;
-
 			if (radix_tree_exceptional_entry(page)) {
 				if (unfalloc)
 					continue;
@@ -860,9 +856,8 @@  static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
 
 		cond_resched();
 
-		if (!pagevec_lookup_entries(&pvec, mapping, &index,
-				min(end - index, (pgoff_t)PAGEVEC_SIZE),
-				indices)) {
+		if (!pagevec_lookup_entries_range(&pvec, mapping, &index,
+				end - 1, PAGEVEC_SIZE, indices)) {
 			/* If all gone or hole-punch or unfalloc, we're done */
 			if (lookup_start == start || end != -1)
 				break;
@@ -873,9 +868,6 @@  static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
 		for (i = 0; i < pagevec_count(&pvec); i++) {
 			struct page *page = pvec.pages[i];
 
-			if (indices[i] >= end)
-				break;
-
 			if (radix_tree_exceptional_entry(page)) {
 				if (unfalloc)
 					continue;
@@ -2494,9 +2486,9 @@  static pgoff_t shmem_seek_hole_data(struct address_space *mapping,
 
 	pagevec_init(&pvec, 0);
 	pvec.nr = 1;		/* start small: we may be there already */
-	while (!done) {
+	while (!done && index < end) {
 		last = index;
-		pvec.nr = find_get_entries(mapping, &index,
+		pvec.nr = find_get_entries_range(mapping, &index, end - 1,
 					pvec.nr, pvec.pages, indices);
 		if (!pvec.nr) {
 			if (whence == SEEK_DATA)
@@ -2516,8 +2508,7 @@  static pgoff_t shmem_seek_hole_data(struct address_space *mapping,
 				if (!PageUptodate(page))
 					page = NULL;
 			}
-			if (last >= end ||
-			    (page && whence == SEEK_DATA) ||
+			if ((page && whence == SEEK_DATA) ||
 			    (!page && whence == SEEK_HOLE)) {
 				done = true;
 				break;