Message ID | 20170601093245.29238-32-jack@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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;
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(-)