From: kernel test robot <lkp@intel.com>
To: Mike Kravetz <mike.kravetz@oracle.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Ammar Faizi <ammarfaizi2@gnuweeb.org>,
GNU/Weeb Mailing List <gwml@vger.gnuweeb.org>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: [ammarfaizi2-block:akpm/mm/mm-unstable 272/276] fs/hugetlbfs/inode.c:562:16: warning: variable 'm_index' is uninitialized when used here
Date: Thu, 25 Aug 2022 10:26:28 +0800 [thread overview]
Message-ID: <202208251012.g1mOhhxy-lkp@intel.com> (raw)
tree: https://github.com/ammarfaizi2/linux-block akpm/mm/mm-unstable
head: 73129b786c0eca5be67491a5e893e13b75133a62
commit: fcc0d3d00d74b012c36d52128687ab9d197d3f0d [272/276] hugetlb: handle truncate racing with page faults
config: arm64-randconfig-r014-20220823 (https://download.01.org/0day-ci/archive/20220825/202208251012.g1mOhhxy-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project d00e97df0fe8c67f694c4d027297f4382ce72b38)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/ammarfaizi2/linux-block/commit/fcc0d3d00d74b012c36d52128687ab9d197d3f0d
git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block akpm/mm/mm-unstable
git checkout fcc0d3d00d74b012c36d52128687ab9d197d3f0d
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash fs/hugetlbfs/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> fs/hugetlbfs/inode.c:562:16: warning: variable 'm_index' is uninitialized when used here [-Wuninitialized]
m_start, m_index, truncate_op);
^~~~~~~
fs/hugetlbfs/inode.c:540:26: note: initialize the variable 'm_index' to silence this warning
pgoff_t m_start, m_index;
^
= 0
1 warning generated.
vim +/m_index +562 fs/hugetlbfs/inode.c
502
503 /*
504 * remove_inode_hugepages handles two distinct cases: truncation and hole
505 * punch. There are subtle differences in operation for each case.
506 *
507 * truncation is indicated by end of range being LLONG_MAX
508 * In this case, we first scan the range and release found pages.
509 * After releasing pages, hugetlb_unreserve_pages cleans up region/reserve
510 * maps and global counts. Page faults can race with truncation.
511 * During faults, hugetlb_no_page() checks i_size before page allocation,
512 * and again after obtaining page table lock. It will 'back out'
513 * allocations in the truncated range.
514 * hole punch is indicated if end is not LLONG_MAX
515 * In the hole punch case we scan the range and release found pages.
516 * Only when releasing a page is the associated region/reserve map
517 * deleted. The region/reserve map for ranges without associated
518 * pages are not modified. Page faults can race with hole punch.
519 * This is indicated if we find a mapped page.
520 * Note: If the passed end of range value is beyond the end of file, but
521 * not LLONG_MAX this routine still performs a hole punch operation.
522 *
523 * Since page faults can race with this routine, care must be taken as both
524 * modify huge page reservation data. To somewhat synchronize these operations
525 * the hugetlb fault mutex is taken for EVERY index in the range to be hole
526 * punched or truncated. In this way, we KNOW either:
527 * - fault code has added a page beyond i_size, and we will remove here
528 * - fault code will see updated i_size and not add a page beyond
529 * The parameter 'lm__end' indicates the offset of the end of hole or file
530 * before truncation. For hole punch lm_end == lend.
531 */
532 static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
533 loff_t lend, loff_t lm_end)
534 {
535 struct hstate *h = hstate_inode(inode);
536 struct address_space *mapping = &inode->i_data;
537 const pgoff_t start = lstart >> huge_page_shift(h);
538 const pgoff_t end = lend >> huge_page_shift(h);
539 pgoff_t m_end = lm_end >> huge_page_shift(h);
540 pgoff_t m_start, m_index;
541 struct folio_batch fbatch;
542 struct folio *folio;
543 pgoff_t next, index;
544 unsigned int i;
545 long freed = 0;
546 u32 hash;
547 bool truncate_op = (lend == LLONG_MAX);
548
549 folio_batch_init(&fbatch);
550 next = m_start = start;
551 while (filemap_get_folios(mapping, &next, end - 1, &fbatch)) {
552 for (i = 0; i < folio_batch_count(&fbatch); ++i) {
553 folio = fbatch.folios[i];
554
555 index = folio->index;
556 /*
557 * Take fault mutex for missing folios before index,
558 * while checking folios that might have been added
559 * due to a race with fault code.
560 */
561 freed += fault_lock_inode_indicies(h, inode, mapping,
> 562 m_start, m_index, truncate_op);
563
564 /*
565 * Remove folio that was part of folio_batch.
566 */
567 hash = hugetlb_fault_mutex_hash(mapping, index);
568 mutex_lock(&hugetlb_fault_mutex_table[hash]);
569 if (remove_inode_single_folio(h, inode, mapping, folio,
570 index, truncate_op))
571 freed++;
572 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
573 }
574 folio_batch_release(&fbatch);
575 cond_resched();
576 }
577
578 /*
579 * Take fault mutex for missing folios at end of range while checking
580 * for folios that might have been added due to a race with fault code.
581 */
582 freed += fault_lock_inode_indicies(h, inode, mapping, m_start, m_end,
583 truncate_op);
584
585 if (truncate_op)
586 (void)hugetlb_unreserve_pages(inode, start, LONG_MAX, freed);
587 }
588
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-08-25 2:27 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202208251012.g1mOhhxy-lkp@intel.com \
--to=lkp@intel.com \
--cc=akpm@linux-foundation.org \
--cc=ammarfaizi2@gnuweeb.org \
--cc=gwml@vger.gnuweeb.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=llvm@lists.linux.dev \
--cc=mike.kravetz@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.