All of lore.kernel.org
 help / color / mirror / Atom feed
* [josef-btrfs:zygo-reworked 74/75] fs//btrfs/extent-tree.c:2096:53: warning: integer overflow in expression
@ 2020-03-09 22:06 ` kbuild test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2020-03-09 22:06 UTC (permalink / raw)
  To: Zygo Blaxell; +Cc: kbuild-all, linux-btrfs, Josef Bacik

[-- Attachment #1: Type: text/plain, Size: 5277 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-next.git zygo-reworked
head:   298bd0d9427133e845fe0c781edcf0f8bcb2325d
commit: 982c26add9a6aef4f44f1215de139c2d93d990de [74/75] btrfs: use a stable rolling avg for delayed refs avg
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 982c26add9a6aef4f44f1215de139c2d93d990de
        # save the attached .config to linux build tree
        GCC_VERSION=7.5.0 make.cross ARCH=sh 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   fs//btrfs/extent-tree.c: In function '__btrfs_run_delayed_refs':
>> fs//btrfs/extent-tree.c:2096:53: warning: integer overflow in expression [-Woverflow]
      if (fs_info->delayed_ref_runtime >= (NSEC_PER_SEC * 1000) &&
                                                        ^

vim +2096 fs//btrfs/extent-tree.c

  1997	
  1998	/*
  1999	 * Returns 0 on success or if called with an already aborted transaction.
  2000	 * Returns -ENOMEM or -EIO on failure and will abort the transaction.
  2001	 */
  2002	static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
  2003						     unsigned long nr)
  2004	{
  2005		struct btrfs_fs_info *fs_info = trans->fs_info;
  2006		struct btrfs_delayed_ref_root *delayed_refs;
  2007		struct btrfs_delayed_ref_head *locked_ref = NULL;
  2008		ktime_t start = ktime_get();
  2009		int ret;
  2010		unsigned long count = 0;
  2011		unsigned long actual_count = 0;
  2012	
  2013		delayed_refs = &trans->transaction->delayed_refs;
  2014		do {
  2015			if (!locked_ref) {
  2016				locked_ref = btrfs_obtain_ref_head(trans);
  2017				if (IS_ERR_OR_NULL(locked_ref)) {
  2018					if (PTR_ERR(locked_ref) == -EAGAIN) {
  2019						continue;
  2020					} else {
  2021						break;
  2022					}
  2023				}
  2024				count++;
  2025			}
  2026			/*
  2027			 * We need to try and merge add/drops of the same ref since we
  2028			 * can run into issues with relocate dropping the implicit ref
  2029			 * and then it being added back again before the drop can
  2030			 * finish.  If we merged anything we need to re-loop so we can
  2031			 * get a good ref.
  2032			 * Or we can get node references of the same type that weren't
  2033			 * merged when created due to bumps in the tree mod seq, and
  2034			 * we need to merge them to prevent adding an inline extent
  2035			 * backref before dropping it (triggering a BUG_ON at
  2036			 * insert_inline_extent_backref()).
  2037			 */
  2038			spin_lock(&locked_ref->lock);
  2039			btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref);
  2040	
  2041			ret = btrfs_run_delayed_refs_for_head(trans, locked_ref,
  2042							      &actual_count);
  2043			if (ret < 0 && ret != -EAGAIN) {
  2044				/*
  2045				 * Error, btrfs_run_delayed_refs_for_head already
  2046				 * unlocked everything so just bail out
  2047				 */
  2048				return ret;
  2049			} else if (!ret) {
  2050				/*
  2051				 * Success, perform the usual cleanup of a processed
  2052				 * head
  2053				 */
  2054				ret = cleanup_ref_head(trans, locked_ref);
  2055				if (ret > 0 ) {
  2056					/* We dropped our lock, we need to loop. */
  2057					ret = 0;
  2058					continue;
  2059				} else if (ret) {
  2060					return ret;
  2061				}
  2062			}
  2063	
  2064			/*
  2065			 * Either success case or btrfs_run_delayed_refs_for_head
  2066			 * returned -EAGAIN, meaning we need to select another head
  2067			 */
  2068	
  2069			locked_ref = NULL;
  2070			cond_resched();
  2071		} while ((nr != -1 && count < nr) || locked_ref);
  2072	
  2073		/*
  2074		 * We don't want to include ref heads since we can have empty ref heads
  2075		 * and those will drastically skew our runtime down since we just do
  2076		 * accounting, no actual extent tree updates.
  2077		 */
  2078		if (actual_count > 0) {
  2079			u64 runtime = ktime_to_ns(ktime_sub(ktime_get(), start));
  2080			u64 avg;
  2081	
  2082			/*
  2083			 * We weigh the current average higher than our current runtime
  2084			 * to avoid large swings in the average.
  2085			 */
  2086			spin_lock(&delayed_refs->lock);
  2087			fs_info->delayed_ref_nr_run += actual_count;
  2088			fs_info->delayed_ref_runtime += runtime;
  2089			avg = div64_u64(fs_info->delayed_ref_runtime,
  2090					fs_info->delayed_ref_nr_run);
  2091	
  2092			/*
  2093			 * Once we've built up a fair bit of data, start decaying
  2094			 * everything by 3/4.
  2095			 */
> 2096			if (fs_info->delayed_ref_runtime >= (NSEC_PER_SEC * 1000) &&
  2097			    fs_info->delayed_ref_nr_run > 1000) {
  2098				fs_info->delayed_ref_runtime *= 3;
  2099				fs_info->delayed_ref_runtime >>= 2;
  2100				fs_info->delayed_ref_nr_run *= 3;
  2101				fs_info->delayed_ref_nr_run >>= 2;
  2102			}
  2103			fs_info->avg_delayed_ref_runtime = avg;
  2104			spin_unlock(&delayed_refs->lock);
  2105		}
  2106		return 0;
  2107	}
  2108	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 53761 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [josef-btrfs:zygo-reworked 74/75] fs//btrfs/extent-tree.c:2096:53: warning: integer overflow in expression
@ 2020-03-09 22:06 ` kbuild test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2020-03-09 22:06 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5419 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-next.git zygo-reworked
head:   298bd0d9427133e845fe0c781edcf0f8bcb2325d
commit: 982c26add9a6aef4f44f1215de139c2d93d990de [74/75] btrfs: use a stable rolling avg for delayed refs avg
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 982c26add9a6aef4f44f1215de139c2d93d990de
        # save the attached .config to linux build tree
        GCC_VERSION=7.5.0 make.cross ARCH=sh 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   fs//btrfs/extent-tree.c: In function '__btrfs_run_delayed_refs':
>> fs//btrfs/extent-tree.c:2096:53: warning: integer overflow in expression [-Woverflow]
      if (fs_info->delayed_ref_runtime >= (NSEC_PER_SEC * 1000) &&
                                                        ^

vim +2096 fs//btrfs/extent-tree.c

  1997	
  1998	/*
  1999	 * Returns 0 on success or if called with an already aborted transaction.
  2000	 * Returns -ENOMEM or -EIO on failure and will abort the transaction.
  2001	 */
  2002	static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
  2003						     unsigned long nr)
  2004	{
  2005		struct btrfs_fs_info *fs_info = trans->fs_info;
  2006		struct btrfs_delayed_ref_root *delayed_refs;
  2007		struct btrfs_delayed_ref_head *locked_ref = NULL;
  2008		ktime_t start = ktime_get();
  2009		int ret;
  2010		unsigned long count = 0;
  2011		unsigned long actual_count = 0;
  2012	
  2013		delayed_refs = &trans->transaction->delayed_refs;
  2014		do {
  2015			if (!locked_ref) {
  2016				locked_ref = btrfs_obtain_ref_head(trans);
  2017				if (IS_ERR_OR_NULL(locked_ref)) {
  2018					if (PTR_ERR(locked_ref) == -EAGAIN) {
  2019						continue;
  2020					} else {
  2021						break;
  2022					}
  2023				}
  2024				count++;
  2025			}
  2026			/*
  2027			 * We need to try and merge add/drops of the same ref since we
  2028			 * can run into issues with relocate dropping the implicit ref
  2029			 * and then it being added back again before the drop can
  2030			 * finish.  If we merged anything we need to re-loop so we can
  2031			 * get a good ref.
  2032			 * Or we can get node references of the same type that weren't
  2033			 * merged when created due to bumps in the tree mod seq, and
  2034			 * we need to merge them to prevent adding an inline extent
  2035			 * backref before dropping it (triggering a BUG_ON at
  2036			 * insert_inline_extent_backref()).
  2037			 */
  2038			spin_lock(&locked_ref->lock);
  2039			btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref);
  2040	
  2041			ret = btrfs_run_delayed_refs_for_head(trans, locked_ref,
  2042							      &actual_count);
  2043			if (ret < 0 && ret != -EAGAIN) {
  2044				/*
  2045				 * Error, btrfs_run_delayed_refs_for_head already
  2046				 * unlocked everything so just bail out
  2047				 */
  2048				return ret;
  2049			} else if (!ret) {
  2050				/*
  2051				 * Success, perform the usual cleanup of a processed
  2052				 * head
  2053				 */
  2054				ret = cleanup_ref_head(trans, locked_ref);
  2055				if (ret > 0 ) {
  2056					/* We dropped our lock, we need to loop. */
  2057					ret = 0;
  2058					continue;
  2059				} else if (ret) {
  2060					return ret;
  2061				}
  2062			}
  2063	
  2064			/*
  2065			 * Either success case or btrfs_run_delayed_refs_for_head
  2066			 * returned -EAGAIN, meaning we need to select another head
  2067			 */
  2068	
  2069			locked_ref = NULL;
  2070			cond_resched();
  2071		} while ((nr != -1 && count < nr) || locked_ref);
  2072	
  2073		/*
  2074		 * We don't want to include ref heads since we can have empty ref heads
  2075		 * and those will drastically skew our runtime down since we just do
  2076		 * accounting, no actual extent tree updates.
  2077		 */
  2078		if (actual_count > 0) {
  2079			u64 runtime = ktime_to_ns(ktime_sub(ktime_get(), start));
  2080			u64 avg;
  2081	
  2082			/*
  2083			 * We weigh the current average higher than our current runtime
  2084			 * to avoid large swings in the average.
  2085			 */
  2086			spin_lock(&delayed_refs->lock);
  2087			fs_info->delayed_ref_nr_run += actual_count;
  2088			fs_info->delayed_ref_runtime += runtime;
  2089			avg = div64_u64(fs_info->delayed_ref_runtime,
  2090					fs_info->delayed_ref_nr_run);
  2091	
  2092			/*
  2093			 * Once we've built up a fair bit of data, start decaying
  2094			 * everything by 3/4.
  2095			 */
> 2096			if (fs_info->delayed_ref_runtime >= (NSEC_PER_SEC * 1000) &&
  2097			    fs_info->delayed_ref_nr_run > 1000) {
  2098				fs_info->delayed_ref_runtime *= 3;
  2099				fs_info->delayed_ref_runtime >>= 2;
  2100				fs_info->delayed_ref_nr_run *= 3;
  2101				fs_info->delayed_ref_nr_run >>= 2;
  2102			}
  2103			fs_info->avg_delayed_ref_runtime = avg;
  2104			spin_unlock(&delayed_refs->lock);
  2105		}
  2106		return 0;
  2107	}
  2108	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 53761 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-03-09 22:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-09 22:06 [josef-btrfs:zygo-reworked 74/75] fs//btrfs/extent-tree.c:2096:53: warning: integer overflow in expression kbuild test robot
2020-03-09 22:06 ` kbuild test robot

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.