All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Nick Desaulniers <ndesaulniers@google.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	linux-kernel@vger.kernel.org, Miguel Ojeda <ojeda@kernel.org>,
	Nathan Chancellor <nathan@kernel.org>,
	Kees Cook <keescook@chromium.org>
Subject: fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
Date: Sat, 27 Nov 2021 02:22:05 +0800	[thread overview]
Message-ID: <202111270255.UYOoN5VN-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   a4849f6000e29235a2707f22e39da6b897bb9543
commit: b83a908498d68fafca931e1276e145b339cac5fb compiler_attributes.h: move __compiletime_{error|warning}
date:   3 months ago
config: hexagon-randconfig-r034-20211126 (https://download.01.org/0day-ci/archive/20211127/202111270255.UYOoN5VN-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 5162b558d8c0b542e752b037e72a69d5fd51eb1e)
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
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b83a908498d68fafca931e1276e145b339cac5fb
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout b83a908498d68fafca931e1276e145b339cac5fb
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash fs/btrfs/ prepare

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

All errors (new ones prefixed by >>):

>> fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
           BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0);
           ^
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:303:4: note: expanded from macro '__compiletime_assert'
                           prefix ## suffix();                             \
                           ^
   <scratch space>:59:1: note: expanded from here
   __compiletime_assert_921
   ^
>> fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:303:4: note: expanded from macro '__compiletime_assert'
                           prefix ## suffix();                             \
                           ^
   <scratch space>:59:1: note: expanded from here
   __compiletime_assert_921
   ^
   2 errors generated.


vim +/error +569 fs/btrfs/inode.c

26d30f852907236 Anand Jain         2016-12-19  512  
d352ac68148b699 Chris Mason        2008-09-29  513  /*
771ed689d2cd534 Chris Mason        2008-11-06  514   * we create compressed extents in two phases.  The first
771ed689d2cd534 Chris Mason        2008-11-06  515   * phase compresses a range of pages that have already been
771ed689d2cd534 Chris Mason        2008-11-06  516   * locked (both pages and state bits are locked).
c8b978188c9a0fd Chris Mason        2008-10-29  517   *
771ed689d2cd534 Chris Mason        2008-11-06  518   * This is done inside an ordered work queue, and the compression
771ed689d2cd534 Chris Mason        2008-11-06  519   * is spread across many cpus.  The actual IO submission is step
771ed689d2cd534 Chris Mason        2008-11-06  520   * two, and the ordered work queue takes care of making sure that
771ed689d2cd534 Chris Mason        2008-11-06  521   * happens in the same order things were put onto the queue by
771ed689d2cd534 Chris Mason        2008-11-06  522   * writepages and friends.
c8b978188c9a0fd Chris Mason        2008-10-29  523   *
771ed689d2cd534 Chris Mason        2008-11-06  524   * If this code finds it can't get good compression, it puts an
771ed689d2cd534 Chris Mason        2008-11-06  525   * entry onto the work queue to write the uncompressed bytes.  This
771ed689d2cd534 Chris Mason        2008-11-06  526   * makes sure that both compressed inodes and uncompressed inodes
b257031408945eb Artem Bityutskiy   2012-07-25  527   * are written in the same order that the flusher thread sent them
b257031408945eb Artem Bityutskiy   2012-07-25  528   * down.
d352ac68148b699 Chris Mason        2008-09-29  529   */
ac3e99334d640b6 Nikolay Borisov    2019-07-17  530  static noinline int compress_file_range(struct async_chunk *async_chunk)
b888db2bd7b67f1 Chris Mason        2007-08-27  531  {
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  532  	struct inode *inode = async_chunk->inode;
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  533  	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  534  	u64 blocksize = fs_info->sectorsize;
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  535  	u64 start = async_chunk->start;
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  536  	u64 end = async_chunk->end;
c8b978188c9a0fd Chris Mason        2008-10-29  537  	u64 actual_end;
d98da49977f6739 Josef Bacik        2019-10-11  538  	u64 i_size;
e6dcd2dc9c48910 Chris Mason        2008-07-17  539  	int ret = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  540  	struct page **pages = NULL;
c8b978188c9a0fd Chris Mason        2008-10-29  541  	unsigned long nr_pages;
c8b978188c9a0fd Chris Mason        2008-10-29  542  	unsigned long total_compressed = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  543  	unsigned long total_in = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  544  	int i;
c8b978188c9a0fd Chris Mason        2008-10-29  545  	int will_compress;
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  546  	int compress_type = fs_info->compress_type;
ac3e99334d640b6 Nikolay Borisov    2019-07-17  547  	int compressed_extents = 0;
4adaa611020fa6a Chris Mason        2013-03-26  548  	int redirty = 0;
b888db2bd7b67f1 Chris Mason        2007-08-27  549  
6158e1ce1cc620d Nikolay Borisov    2017-02-20  550  	inode_should_defrag(BTRFS_I(inode), start, end, end - start + 1,
6158e1ce1cc620d Nikolay Borisov    2017-02-20  551  			SZ_16K);
4cb5300bc839b8a Chris Mason        2011-05-24  552  
d98da49977f6739 Josef Bacik        2019-10-11  553  	/*
d98da49977f6739 Josef Bacik        2019-10-11  554  	 * We need to save i_size before now because it could change in between
d98da49977f6739 Josef Bacik        2019-10-11  555  	 * us evaluating the size and assigning it.  This is because we lock and
d98da49977f6739 Josef Bacik        2019-10-11  556  	 * unlock the page in truncate and fallocate, and then modify the i_size
d98da49977f6739 Josef Bacik        2019-10-11  557  	 * later on.
d98da49977f6739 Josef Bacik        2019-10-11  558  	 *
d98da49977f6739 Josef Bacik        2019-10-11  559  	 * The barriers are to emulate READ_ONCE, remove that once i_size_read
d98da49977f6739 Josef Bacik        2019-10-11  560  	 * does that for us.
d98da49977f6739 Josef Bacik        2019-10-11  561  	 */
d98da49977f6739 Josef Bacik        2019-10-11  562  	barrier();
d98da49977f6739 Josef Bacik        2019-10-11  563  	i_size = i_size_read(inode);
d98da49977f6739 Josef Bacik        2019-10-11  564  	barrier();
d98da49977f6739 Josef Bacik        2019-10-11  565  	actual_end = min_t(u64, i_size, end + 1);
c8b978188c9a0fd Chris Mason        2008-10-29  566  again:
c8b978188c9a0fd Chris Mason        2008-10-29  567  	will_compress = 0;
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  568  	nr_pages = (end >> PAGE_SHIFT) - (start >> PAGE_SHIFT) + 1;
069eac7850890ac David Sterba       2017-02-14 @569  	BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0);
069eac7850890ac David Sterba       2017-02-14  570  	nr_pages = min_t(unsigned long, nr_pages,
069eac7850890ac David Sterba       2017-02-14  571  			BTRFS_MAX_COMPRESSED / PAGE_SIZE);
c8b978188c9a0fd Chris Mason        2008-10-29  572  
f03d9301f15fb69 Chris Mason        2009-02-04  573  	/*
f03d9301f15fb69 Chris Mason        2009-02-04  574  	 * we don't want to send crud past the end of i_size through
f03d9301f15fb69 Chris Mason        2009-02-04  575  	 * compression, that's just a waste of CPU time.  So, if the
f03d9301f15fb69 Chris Mason        2009-02-04  576  	 * end of the file is before the start of our current
f03d9301f15fb69 Chris Mason        2009-02-04  577  	 * requested range of bytes, we bail out to the uncompressed
f03d9301f15fb69 Chris Mason        2009-02-04  578  	 * cleanup code that can deal with all of this.
f03d9301f15fb69 Chris Mason        2009-02-04  579  	 *
f03d9301f15fb69 Chris Mason        2009-02-04  580  	 * It isn't really the fastest way to fix things, but this is a
f03d9301f15fb69 Chris Mason        2009-02-04  581  	 * very uncommon corner.
f03d9301f15fb69 Chris Mason        2009-02-04  582  	 */
f03d9301f15fb69 Chris Mason        2009-02-04  583  	if (actual_end <= start)
f03d9301f15fb69 Chris Mason        2009-02-04  584  		goto cleanup_and_bail_uncompressed;
f03d9301f15fb69 Chris Mason        2009-02-04  585  
c8b978188c9a0fd Chris Mason        2008-10-29  586  	total_compressed = actual_end - start;
c8b978188c9a0fd Chris Mason        2008-10-29  587  
4bcbb33255131ad Shilong Wang       2014-10-07  588  	/*
4bcbb33255131ad Shilong Wang       2014-10-07  589  	 * skip compression for a small file range(<=blocksize) that
0132761017e012a Nicholas D Steeves 2016-05-19  590  	 * isn't an inline extent, since it doesn't save disk space at all.
4bcbb33255131ad Shilong Wang       2014-10-07  591  	 */
4bcbb33255131ad Shilong Wang       2014-10-07  592  	if (total_compressed <= blocksize &&
4bcbb33255131ad Shilong Wang       2014-10-07  593  	   (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size))
4bcbb33255131ad Shilong Wang       2014-10-07  594  		goto cleanup_and_bail_uncompressed;
4bcbb33255131ad Shilong Wang       2014-10-07  595  
069eac7850890ac David Sterba       2017-02-14  596  	total_compressed = min_t(unsigned long, total_compressed,
069eac7850890ac David Sterba       2017-02-14  597  			BTRFS_MAX_UNCOMPRESSED);
c8b978188c9a0fd Chris Mason        2008-10-29  598  	total_in = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  599  	ret = 0;
db94535db75e67f Chris Mason        2007-10-15  600  
771ed689d2cd534 Chris Mason        2008-11-06  601  	/*
771ed689d2cd534 Chris Mason        2008-11-06  602  	 * we do compression for mount -o compress and when the
771ed689d2cd534 Chris Mason        2008-11-06  603  	 * inode has not been flagged as nocompress.  This flag can
771ed689d2cd534 Chris Mason        2008-11-06  604  	 * change at any time if we discover bad compression ratios.
c8b978188c9a0fd Chris Mason        2008-10-29  605  	 */
808a12923203ee1 Nikolay Borisov    2020-06-03  606  	if (inode_need_compress(BTRFS_I(inode), start, end)) {
c8b978188c9a0fd Chris Mason        2008-10-29  607  		WARN_ON(pages);
31e818fe7375d60 David Sterba       2015-02-20  608  		pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
560f7d75457f86a Li Zefan           2011-09-08  609  		if (!pages) {
560f7d75457f86a Li Zefan           2011-09-08  610  			/* just bail out to the uncompressed code */
3527a018c00e5db Filipe Manana      2018-10-13  611  			nr_pages = 0;
560f7d75457f86a Li Zefan           2011-09-08  612  			goto cont;
560f7d75457f86a Li Zefan           2011-09-08  613  		}
c8b978188c9a0fd Chris Mason        2008-10-29  614  
eec63c65dcbeb14 David Sterba       2017-07-17  615  		if (BTRFS_I(inode)->defrag_compress)
eec63c65dcbeb14 David Sterba       2017-07-17  616  			compress_type = BTRFS_I(inode)->defrag_compress;
eec63c65dcbeb14 David Sterba       2017-07-17  617  		else if (BTRFS_I(inode)->prop_compress)
b52aa8c93e1fec9 David Sterba       2017-07-17  618  			compress_type = BTRFS_I(inode)->prop_compress;
261507a02ccba9a Li Zefan           2010-12-17  619  
4adaa611020fa6a Chris Mason        2013-03-26  620  		/*
4adaa611020fa6a Chris Mason        2013-03-26  621  		 * we need to call clear_page_dirty_for_io on each
4adaa611020fa6a Chris Mason        2013-03-26  622  		 * page in the range.  Otherwise applications with the file
4adaa611020fa6a Chris Mason        2013-03-26  623  		 * mmap'd can wander in and change the page contents while
4adaa611020fa6a Chris Mason        2013-03-26  624  		 * we are compressing them.
4adaa611020fa6a Chris Mason        2013-03-26  625  		 *
4adaa611020fa6a Chris Mason        2013-03-26  626  		 * If the compression fails for any reason, we set the pages
4adaa611020fa6a Chris Mason        2013-03-26  627  		 * dirty again later on.
e9679de3fdcb11a Timofey Titovets   2017-10-24  628  		 *
e9679de3fdcb11a Timofey Titovets   2017-10-24  629  		 * Note that the remaining part is redirtied, the start pointer
e9679de3fdcb11a Timofey Titovets   2017-10-24  630  		 * has moved, the end is the original one.
4adaa611020fa6a Chris Mason        2013-03-26  631  		 */
e9679de3fdcb11a Timofey Titovets   2017-10-24  632  		if (!redirty) {
4adaa611020fa6a Chris Mason        2013-03-26  633  			extent_range_clear_dirty_for_io(inode, start, end);
4adaa611020fa6a Chris Mason        2013-03-26  634  			redirty = 1;
e9679de3fdcb11a Timofey Titovets   2017-10-24  635  		}
f51d2b59120ff36 David Sterba       2017-09-15  636  
f51d2b59120ff36 David Sterba       2017-09-15  637  		/* Compression level is applied here and only here */
f51d2b59120ff36 David Sterba       2017-09-15  638  		ret = btrfs_compress_pages(
f51d2b59120ff36 David Sterba       2017-09-15  639  			compress_type | (fs_info->compress_level << 4),
261507a02ccba9a Li Zefan           2010-12-17  640  					   inode->i_mapping, start,
38c31464089f639 David Sterba       2017-02-14  641  					   pages,
4d3a800ebb12999 David Sterba       2017-02-14  642  					   &nr_pages,
c8b978188c9a0fd Chris Mason        2008-10-29  643  					   &total_in,
e5d74902362f1a0 David Sterba       2017-02-14  644  					   &total_compressed);
c8b978188c9a0fd Chris Mason        2008-10-29  645  
c8b978188c9a0fd Chris Mason        2008-10-29  646  		if (!ret) {
7073017aeb98db3 Johannes Thumshirn 2018-12-05  647  			unsigned long offset = offset_in_page(total_compressed);
4d3a800ebb12999 David Sterba       2017-02-14  648  			struct page *page = pages[nr_pages - 1];
c8b978188c9a0fd Chris Mason        2008-10-29  649  
c8b978188c9a0fd Chris Mason        2008-10-29  650  			/* zero the tail end of the last page, we might be
c8b978188c9a0fd Chris Mason        2008-10-29  651  			 * sending it down to disk
c8b978188c9a0fd Chris Mason        2008-10-29  652  			 */
d048b9c2a737eb7 Ira Weiny          2021-05-04  653  			if (offset)
d048b9c2a737eb7 Ira Weiny          2021-05-04  654  				memzero_page(page, offset, PAGE_SIZE - offset);
c8b978188c9a0fd Chris Mason        2008-10-29  655  			will_compress = 1;
c8b978188c9a0fd Chris Mason        2008-10-29  656  		}
c8b978188c9a0fd Chris Mason        2008-10-29  657  	}
560f7d75457f86a Li Zefan           2011-09-08  658  cont:
c8b978188c9a0fd Chris Mason        2008-10-29  659  	if (start == 0) {
c8b978188c9a0fd Chris Mason        2008-10-29  660  		/* lets try to make an inline extent */
6018ba0a0e1bc23 Timofey Titovets   2017-09-15  661  		if (ret || total_in < actual_end) {
c8b978188c9a0fd Chris Mason        2008-10-29  662  			/* we didn't compress the entire range, try
771ed689d2cd534 Chris Mason        2008-11-06  663  			 * to make an uncompressed inline extent.
c8b978188c9a0fd Chris Mason        2008-10-29  664  			 */
a0349401c14f507 Nikolay Borisov    2020-06-03  665  			ret = cow_file_range_inline(BTRFS_I(inode), start, end,
a0349401c14f507 Nikolay Borisov    2020-06-03  666  						    0, BTRFS_COMPRESS_NONE,
a0349401c14f507 Nikolay Borisov    2020-06-03  667  						    NULL);
c8b978188c9a0fd Chris Mason        2008-10-29  668  		} else {
771ed689d2cd534 Chris Mason        2008-11-06  669  			/* try making a compressed inline extent */
a0349401c14f507 Nikolay Borisov    2020-06-03  670  			ret = cow_file_range_inline(BTRFS_I(inode), start, end,
fe3f566cd19bb6d Li Zefan           2011-03-28  671  						    total_compressed,
fe3f566cd19bb6d Li Zefan           2011-03-28  672  						    compress_type, pages);
c8b978188c9a0fd Chris Mason        2008-10-29  673  		}
79787eaab46121d Jeff Mahoney       2012-03-12  674  		if (ret <= 0) {
151a41bc46df2a9 Josef Bacik        2013-07-29  675  			unsigned long clear_flags = EXTENT_DELALLOC |
8b62f87bad9cf06 Josef Bacik        2017-10-19  676  				EXTENT_DELALLOC_NEW | EXTENT_DEFRAG |
8b62f87bad9cf06 Josef Bacik        2017-10-19  677  				EXTENT_DO_ACCOUNTING;
e6eb43142a72ba3 Filipe Manana      2014-10-10  678  			unsigned long page_error_op;
e6eb43142a72ba3 Filipe Manana      2014-10-10  679  
e6eb43142a72ba3 Filipe Manana      2014-10-10  680  			page_error_op = ret < 0 ? PAGE_SET_ERROR : 0;
151a41bc46df2a9 Josef Bacik        2013-07-29  681  
771ed689d2cd534 Chris Mason        2008-11-06  682  			/*
79787eaab46121d Jeff Mahoney       2012-03-12  683  			 * inline extent creation worked or returned error,
79787eaab46121d Jeff Mahoney       2012-03-12  684  			 * we don't need to create any more async work items.
79787eaab46121d Jeff Mahoney       2012-03-12  685  			 * Unlock and free up our temp pages.
8b62f87bad9cf06 Josef Bacik        2017-10-19  686  			 *
8b62f87bad9cf06 Josef Bacik        2017-10-19  687  			 * We use DO_ACCOUNTING here because we need the
8b62f87bad9cf06 Josef Bacik        2017-10-19  688  			 * delalloc_release_metadata to be done _after_ we drop
8b62f87bad9cf06 Josef Bacik        2017-10-19  689  			 * our outstanding extent for clearing delalloc for this
8b62f87bad9cf06 Josef Bacik        2017-10-19  690  			 * range.
771ed689d2cd534 Chris Mason        2008-11-06  691  			 */
ad7ff17b65a0567 Nikolay Borisov    2020-06-03  692  			extent_clear_unlock_delalloc(BTRFS_I(inode), start, end,
ad7ff17b65a0567 Nikolay Borisov    2020-06-03  693  						     NULL,
74e9194afb2c5c6 Nikolay Borisov    2019-07-17  694  						     clear_flags,
ba8b04c1d4adbc6 Qu Wenruo          2016-07-19  695  						     PAGE_UNLOCK |
6869b0a8be775e9 Qu Wenruo          2021-01-26  696  						     PAGE_START_WRITEBACK |
e6eb43142a72ba3 Filipe Manana      2014-10-10  697  						     page_error_op |
c2790a2e2bc8240 Josef Bacik        2013-07-29  698  						     PAGE_END_WRITEBACK);
cecc8d9038d164e Nikolay Borisov    2019-07-17  699  
1e6e238c3002ea3 Qu Wenruo          2020-07-28  700  			/*
1e6e238c3002ea3 Qu Wenruo          2020-07-28  701  			 * Ensure we only free the compressed pages if we have
1e6e238c3002ea3 Qu Wenruo          2020-07-28  702  			 * them allocated, as we can still reach here with
1e6e238c3002ea3 Qu Wenruo          2020-07-28  703  			 * inode_need_compress() == false.
1e6e238c3002ea3 Qu Wenruo          2020-07-28  704  			 */
1e6e238c3002ea3 Qu Wenruo          2020-07-28  705  			if (pages) {
cecc8d9038d164e Nikolay Borisov    2019-07-17  706  				for (i = 0; i < nr_pages; i++) {
cecc8d9038d164e Nikolay Borisov    2019-07-17  707  					WARN_ON(pages[i]->mapping);
cecc8d9038d164e Nikolay Borisov    2019-07-17  708  					put_page(pages[i]);
cecc8d9038d164e Nikolay Borisov    2019-07-17  709  				}
cecc8d9038d164e Nikolay Borisov    2019-07-17  710  				kfree(pages);
1e6e238c3002ea3 Qu Wenruo          2020-07-28  711  			}
cecc8d9038d164e Nikolay Borisov    2019-07-17  712  			return 0;
c8b978188c9a0fd Chris Mason        2008-10-29  713  		}
c8b978188c9a0fd Chris Mason        2008-10-29  714  	}
c8b978188c9a0fd Chris Mason        2008-10-29  715  
c8b978188c9a0fd Chris Mason        2008-10-29  716  	if (will_compress) {
c8b978188c9a0fd Chris Mason        2008-10-29  717  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  718  		 * we aren't doing an inline extent round the compressed size
c8b978188c9a0fd Chris Mason        2008-10-29  719  		 * up to a block size boundary so the allocator does sane
c8b978188c9a0fd Chris Mason        2008-10-29  720  		 * things
c8b978188c9a0fd Chris Mason        2008-10-29  721  		 */
fda2832febb1928 Qu Wenruo          2013-02-26  722  		total_compressed = ALIGN(total_compressed, blocksize);
c8b978188c9a0fd Chris Mason        2008-10-29  723  
c8b978188c9a0fd Chris Mason        2008-10-29  724  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  725  		 * one last check to make sure the compression is really a
170607ebd9c891d Timofey Titovets   2017-06-06  726  		 * win, compare the page count read with the blocks on disk,
170607ebd9c891d Timofey Titovets   2017-06-06  727  		 * compression must free at least one sector size
c8b978188c9a0fd Chris Mason        2008-10-29  728  		 */
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  729  		total_in = ALIGN(total_in, PAGE_SIZE);
170607ebd9c891d Timofey Titovets   2017-06-06  730  		if (total_compressed + blocksize <= total_in) {
ac3e99334d640b6 Nikolay Borisov    2019-07-17  731  			compressed_extents++;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  732  
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  733  			/*
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  734  			 * The async work queues will take care of doing actual
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  735  			 * allocation on disk for these compressed pages, and
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  736  			 * will submit them to the elevator.
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  737  			 */
b5326271e791ea9 Nikolay Borisov    2019-03-12  738  			add_async_extent(async_chunk, start, total_in,
4d3a800ebb12999 David Sterba       2017-02-14  739  					total_compressed, pages, nr_pages,
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  740  					compress_type);
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  741  
1170862d783a3b4 Timofey Titovets   2017-10-03  742  			if (start + total_in < end) {
1170862d783a3b4 Timofey Titovets   2017-10-03  743  				start += total_in;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  744  				pages = NULL;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  745  				cond_resched();
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  746  				goto again;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  747  			}
ac3e99334d640b6 Nikolay Borisov    2019-07-17  748  			return compressed_extents;
c8b978188c9a0fd Chris Mason        2008-10-29  749  		}
c8b978188c9a0fd Chris Mason        2008-10-29  750  	}
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  751  	if (pages) {
c8b978188c9a0fd Chris Mason        2008-10-29  752  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  753  		 * the compression code ran but failed to make things smaller,
c8b978188c9a0fd Chris Mason        2008-10-29  754  		 * free any pages it allocated and our page pointer array
c8b978188c9a0fd Chris Mason        2008-10-29  755  		 */
4d3a800ebb12999 David Sterba       2017-02-14  756  		for (i = 0; i < nr_pages; i++) {
70b99e6959a4c28 Chris Mason        2008-10-31  757  			WARN_ON(pages[i]->mapping);
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  758  			put_page(pages[i]);
c8b978188c9a0fd Chris Mason        2008-10-29  759  		}
c8b978188c9a0fd Chris Mason        2008-10-29  760  		kfree(pages);
c8b978188c9a0fd Chris Mason        2008-10-29  761  		pages = NULL;
c8b978188c9a0fd Chris Mason        2008-10-29  762  		total_compressed = 0;
4d3a800ebb12999 David Sterba       2017-02-14  763  		nr_pages = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  764  
c8b978188c9a0fd Chris Mason        2008-10-29  765  		/* flag the file so we don't compress in the future */
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  766  		if (!btrfs_test_opt(fs_info, FORCE_COMPRESS) &&
b52aa8c93e1fec9 David Sterba       2017-07-17  767  		    !(BTRFS_I(inode)->prop_compress)) {
6cbff00f4632c80 Christoph Hellwig  2009-04-17  768  			BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
c8b978188c9a0fd Chris Mason        2008-10-29  769  		}
1e701a3292e25a6 Chris Mason        2010-03-11  770  	}
f03d9301f15fb69 Chris Mason        2009-02-04  771  cleanup_and_bail_uncompressed:
771ed689d2cd534 Chris Mason        2008-11-06  772  	/*
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  773  	 * No compression, but we still need to write the pages in the file
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  774  	 * we've been given so far.  redirty the locked page if it corresponds
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  775  	 * to our extent and set things up for the async work queue to run
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  776  	 * cow_file_range to do the normal delalloc dance.
771ed689d2cd534 Chris Mason        2008-11-06  777  	 */
1d53c9e6723022b Chris Mason        2019-07-10  778  	if (async_chunk->locked_page &&
1d53c9e6723022b Chris Mason        2019-07-10  779  	    (page_offset(async_chunk->locked_page) >= start &&
1d53c9e6723022b Chris Mason        2019-07-10  780  	     page_offset(async_chunk->locked_page)) <= end) {
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  781  		__set_page_dirty_nobuffers(async_chunk->locked_page);
771ed689d2cd534 Chris Mason        2008-11-06  782  		/* unlocked later on in the async handlers */
1d53c9e6723022b Chris Mason        2019-07-10  783  	}
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  784  
4adaa611020fa6a Chris Mason        2013-03-26  785  	if (redirty)
4adaa611020fa6a Chris Mason        2013-03-26  786  		extent_range_redirty_for_io(inode, start, end);
b5326271e791ea9 Nikolay Borisov    2019-03-12  787  	add_async_extent(async_chunk, start, end - start + 1, 0, NULL, 0,
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  788  			 BTRFS_COMPRESS_NONE);
ac3e99334d640b6 Nikolay Borisov    2019-07-17  789  	compressed_extents++;
3b951516ed703af Chris Mason        2008-04-17  790  
ac3e99334d640b6 Nikolay Borisov    2019-07-17  791  	return compressed_extents;
771ed689d2cd534 Chris Mason        2008-11-06  792  }
771ed689d2cd534 Chris Mason        2008-11-06  793  

:::::: The code at line 569 was first introduced by commit
:::::: 069eac7850890acf0d3c21a6c8ca9f33ddb34a0d btrfs: use predefined limits for calculating maximum number of pages for compression

:::::: TO: David Sterba <dsterba@suse.com>
:::::: CC: David Sterba <dsterba@suse.com>

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

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
Date: Sat, 27 Nov 2021 02:22:05 +0800	[thread overview]
Message-ID: <202111270255.UYOoN5VN-lkp@intel.com> (raw)

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   a4849f6000e29235a2707f22e39da6b897bb9543
commit: b83a908498d68fafca931e1276e145b339cac5fb compiler_attributes.h: move __compiletime_{error|warning}
date:   3 months ago
config: hexagon-randconfig-r034-20211126 (https://download.01.org/0day-ci/archive/20211127/202111270255.UYOoN5VN-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 5162b558d8c0b542e752b037e72a69d5fd51eb1e)
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
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b83a908498d68fafca931e1276e145b339cac5fb
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout b83a908498d68fafca931e1276e145b339cac5fb
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash fs/btrfs/ prepare

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

All errors (new ones prefixed by >>):

>> fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
           BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0);
           ^
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:303:4: note: expanded from macro '__compiletime_assert'
                           prefix ## suffix();                             \
                           ^
   <scratch space>:59:1: note: expanded from here
   __compiletime_assert_921
   ^
>> fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:303:4: note: expanded from macro '__compiletime_assert'
                           prefix ## suffix();                             \
                           ^
   <scratch space>:59:1: note: expanded from here
   __compiletime_assert_921
   ^
   2 errors generated.


vim +/error +569 fs/btrfs/inode.c

26d30f852907236 Anand Jain         2016-12-19  512  
d352ac68148b699 Chris Mason        2008-09-29  513  /*
771ed689d2cd534 Chris Mason        2008-11-06  514   * we create compressed extents in two phases.  The first
771ed689d2cd534 Chris Mason        2008-11-06  515   * phase compresses a range of pages that have already been
771ed689d2cd534 Chris Mason        2008-11-06  516   * locked (both pages and state bits are locked).
c8b978188c9a0fd Chris Mason        2008-10-29  517   *
771ed689d2cd534 Chris Mason        2008-11-06  518   * This is done inside an ordered work queue, and the compression
771ed689d2cd534 Chris Mason        2008-11-06  519   * is spread across many cpus.  The actual IO submission is step
771ed689d2cd534 Chris Mason        2008-11-06  520   * two, and the ordered work queue takes care of making sure that
771ed689d2cd534 Chris Mason        2008-11-06  521   * happens in the same order things were put onto the queue by
771ed689d2cd534 Chris Mason        2008-11-06  522   * writepages and friends.
c8b978188c9a0fd Chris Mason        2008-10-29  523   *
771ed689d2cd534 Chris Mason        2008-11-06  524   * If this code finds it can't get good compression, it puts an
771ed689d2cd534 Chris Mason        2008-11-06  525   * entry onto the work queue to write the uncompressed bytes.  This
771ed689d2cd534 Chris Mason        2008-11-06  526   * makes sure that both compressed inodes and uncompressed inodes
b257031408945eb Artem Bityutskiy   2012-07-25  527   * are written in the same order that the flusher thread sent them
b257031408945eb Artem Bityutskiy   2012-07-25  528   * down.
d352ac68148b699 Chris Mason        2008-09-29  529   */
ac3e99334d640b6 Nikolay Borisov    2019-07-17  530  static noinline int compress_file_range(struct async_chunk *async_chunk)
b888db2bd7b67f1 Chris Mason        2007-08-27  531  {
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  532  	struct inode *inode = async_chunk->inode;
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  533  	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  534  	u64 blocksize = fs_info->sectorsize;
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  535  	u64 start = async_chunk->start;
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  536  	u64 end = async_chunk->end;
c8b978188c9a0fd Chris Mason        2008-10-29  537  	u64 actual_end;
d98da49977f6739 Josef Bacik        2019-10-11  538  	u64 i_size;
e6dcd2dc9c48910 Chris Mason        2008-07-17  539  	int ret = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  540  	struct page **pages = NULL;
c8b978188c9a0fd Chris Mason        2008-10-29  541  	unsigned long nr_pages;
c8b978188c9a0fd Chris Mason        2008-10-29  542  	unsigned long total_compressed = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  543  	unsigned long total_in = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  544  	int i;
c8b978188c9a0fd Chris Mason        2008-10-29  545  	int will_compress;
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  546  	int compress_type = fs_info->compress_type;
ac3e99334d640b6 Nikolay Borisov    2019-07-17  547  	int compressed_extents = 0;
4adaa611020fa6a Chris Mason        2013-03-26  548  	int redirty = 0;
b888db2bd7b67f1 Chris Mason        2007-08-27  549  
6158e1ce1cc620d Nikolay Borisov    2017-02-20  550  	inode_should_defrag(BTRFS_I(inode), start, end, end - start + 1,
6158e1ce1cc620d Nikolay Borisov    2017-02-20  551  			SZ_16K);
4cb5300bc839b8a Chris Mason        2011-05-24  552  
d98da49977f6739 Josef Bacik        2019-10-11  553  	/*
d98da49977f6739 Josef Bacik        2019-10-11  554  	 * We need to save i_size before now because it could change in between
d98da49977f6739 Josef Bacik        2019-10-11  555  	 * us evaluating the size and assigning it.  This is because we lock and
d98da49977f6739 Josef Bacik        2019-10-11  556  	 * unlock the page in truncate and fallocate, and then modify the i_size
d98da49977f6739 Josef Bacik        2019-10-11  557  	 * later on.
d98da49977f6739 Josef Bacik        2019-10-11  558  	 *
d98da49977f6739 Josef Bacik        2019-10-11  559  	 * The barriers are to emulate READ_ONCE, remove that once i_size_read
d98da49977f6739 Josef Bacik        2019-10-11  560  	 * does that for us.
d98da49977f6739 Josef Bacik        2019-10-11  561  	 */
d98da49977f6739 Josef Bacik        2019-10-11  562  	barrier();
d98da49977f6739 Josef Bacik        2019-10-11  563  	i_size = i_size_read(inode);
d98da49977f6739 Josef Bacik        2019-10-11  564  	barrier();
d98da49977f6739 Josef Bacik        2019-10-11  565  	actual_end = min_t(u64, i_size, end + 1);
c8b978188c9a0fd Chris Mason        2008-10-29  566  again:
c8b978188c9a0fd Chris Mason        2008-10-29  567  	will_compress = 0;
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  568  	nr_pages = (end >> PAGE_SHIFT) - (start >> PAGE_SHIFT) + 1;
069eac7850890ac David Sterba       2017-02-14 @569  	BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0);
069eac7850890ac David Sterba       2017-02-14  570  	nr_pages = min_t(unsigned long, nr_pages,
069eac7850890ac David Sterba       2017-02-14  571  			BTRFS_MAX_COMPRESSED / PAGE_SIZE);
c8b978188c9a0fd Chris Mason        2008-10-29  572  
f03d9301f15fb69 Chris Mason        2009-02-04  573  	/*
f03d9301f15fb69 Chris Mason        2009-02-04  574  	 * we don't want to send crud past the end of i_size through
f03d9301f15fb69 Chris Mason        2009-02-04  575  	 * compression, that's just a waste of CPU time.  So, if the
f03d9301f15fb69 Chris Mason        2009-02-04  576  	 * end of the file is before the start of our current
f03d9301f15fb69 Chris Mason        2009-02-04  577  	 * requested range of bytes, we bail out to the uncompressed
f03d9301f15fb69 Chris Mason        2009-02-04  578  	 * cleanup code that can deal with all of this.
f03d9301f15fb69 Chris Mason        2009-02-04  579  	 *
f03d9301f15fb69 Chris Mason        2009-02-04  580  	 * It isn't really the fastest way to fix things, but this is a
f03d9301f15fb69 Chris Mason        2009-02-04  581  	 * very uncommon corner.
f03d9301f15fb69 Chris Mason        2009-02-04  582  	 */
f03d9301f15fb69 Chris Mason        2009-02-04  583  	if (actual_end <= start)
f03d9301f15fb69 Chris Mason        2009-02-04  584  		goto cleanup_and_bail_uncompressed;
f03d9301f15fb69 Chris Mason        2009-02-04  585  
c8b978188c9a0fd Chris Mason        2008-10-29  586  	total_compressed = actual_end - start;
c8b978188c9a0fd Chris Mason        2008-10-29  587  
4bcbb33255131ad Shilong Wang       2014-10-07  588  	/*
4bcbb33255131ad Shilong Wang       2014-10-07  589  	 * skip compression for a small file range(<=blocksize) that
0132761017e012a Nicholas D Steeves 2016-05-19  590  	 * isn't an inline extent, since it doesn't save disk space@all.
4bcbb33255131ad Shilong Wang       2014-10-07  591  	 */
4bcbb33255131ad Shilong Wang       2014-10-07  592  	if (total_compressed <= blocksize &&
4bcbb33255131ad Shilong Wang       2014-10-07  593  	   (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size))
4bcbb33255131ad Shilong Wang       2014-10-07  594  		goto cleanup_and_bail_uncompressed;
4bcbb33255131ad Shilong Wang       2014-10-07  595  
069eac7850890ac David Sterba       2017-02-14  596  	total_compressed = min_t(unsigned long, total_compressed,
069eac7850890ac David Sterba       2017-02-14  597  			BTRFS_MAX_UNCOMPRESSED);
c8b978188c9a0fd Chris Mason        2008-10-29  598  	total_in = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  599  	ret = 0;
db94535db75e67f Chris Mason        2007-10-15  600  
771ed689d2cd534 Chris Mason        2008-11-06  601  	/*
771ed689d2cd534 Chris Mason        2008-11-06  602  	 * we do compression for mount -o compress and when the
771ed689d2cd534 Chris Mason        2008-11-06  603  	 * inode has not been flagged as nocompress.  This flag can
771ed689d2cd534 Chris Mason        2008-11-06  604  	 * change at any time if we discover bad compression ratios.
c8b978188c9a0fd Chris Mason        2008-10-29  605  	 */
808a12923203ee1 Nikolay Borisov    2020-06-03  606  	if (inode_need_compress(BTRFS_I(inode), start, end)) {
c8b978188c9a0fd Chris Mason        2008-10-29  607  		WARN_ON(pages);
31e818fe7375d60 David Sterba       2015-02-20  608  		pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
560f7d75457f86a Li Zefan           2011-09-08  609  		if (!pages) {
560f7d75457f86a Li Zefan           2011-09-08  610  			/* just bail out to the uncompressed code */
3527a018c00e5db Filipe Manana      2018-10-13  611  			nr_pages = 0;
560f7d75457f86a Li Zefan           2011-09-08  612  			goto cont;
560f7d75457f86a Li Zefan           2011-09-08  613  		}
c8b978188c9a0fd Chris Mason        2008-10-29  614  
eec63c65dcbeb14 David Sterba       2017-07-17  615  		if (BTRFS_I(inode)->defrag_compress)
eec63c65dcbeb14 David Sterba       2017-07-17  616  			compress_type = BTRFS_I(inode)->defrag_compress;
eec63c65dcbeb14 David Sterba       2017-07-17  617  		else if (BTRFS_I(inode)->prop_compress)
b52aa8c93e1fec9 David Sterba       2017-07-17  618  			compress_type = BTRFS_I(inode)->prop_compress;
261507a02ccba9a Li Zefan           2010-12-17  619  
4adaa611020fa6a Chris Mason        2013-03-26  620  		/*
4adaa611020fa6a Chris Mason        2013-03-26  621  		 * we need to call clear_page_dirty_for_io on each
4adaa611020fa6a Chris Mason        2013-03-26  622  		 * page in the range.  Otherwise applications with the file
4adaa611020fa6a Chris Mason        2013-03-26  623  		 * mmap'd can wander in and change the page contents while
4adaa611020fa6a Chris Mason        2013-03-26  624  		 * we are compressing them.
4adaa611020fa6a Chris Mason        2013-03-26  625  		 *
4adaa611020fa6a Chris Mason        2013-03-26  626  		 * If the compression fails for any reason, we set the pages
4adaa611020fa6a Chris Mason        2013-03-26  627  		 * dirty again later on.
e9679de3fdcb11a Timofey Titovets   2017-10-24  628  		 *
e9679de3fdcb11a Timofey Titovets   2017-10-24  629  		 * Note that the remaining part is redirtied, the start pointer
e9679de3fdcb11a Timofey Titovets   2017-10-24  630  		 * has moved, the end is the original one.
4adaa611020fa6a Chris Mason        2013-03-26  631  		 */
e9679de3fdcb11a Timofey Titovets   2017-10-24  632  		if (!redirty) {
4adaa611020fa6a Chris Mason        2013-03-26  633  			extent_range_clear_dirty_for_io(inode, start, end);
4adaa611020fa6a Chris Mason        2013-03-26  634  			redirty = 1;
e9679de3fdcb11a Timofey Titovets   2017-10-24  635  		}
f51d2b59120ff36 David Sterba       2017-09-15  636  
f51d2b59120ff36 David Sterba       2017-09-15  637  		/* Compression level is applied here and only here */
f51d2b59120ff36 David Sterba       2017-09-15  638  		ret = btrfs_compress_pages(
f51d2b59120ff36 David Sterba       2017-09-15  639  			compress_type | (fs_info->compress_level << 4),
261507a02ccba9a Li Zefan           2010-12-17  640  					   inode->i_mapping, start,
38c31464089f639 David Sterba       2017-02-14  641  					   pages,
4d3a800ebb12999 David Sterba       2017-02-14  642  					   &nr_pages,
c8b978188c9a0fd Chris Mason        2008-10-29  643  					   &total_in,
e5d74902362f1a0 David Sterba       2017-02-14  644  					   &total_compressed);
c8b978188c9a0fd Chris Mason        2008-10-29  645  
c8b978188c9a0fd Chris Mason        2008-10-29  646  		if (!ret) {
7073017aeb98db3 Johannes Thumshirn 2018-12-05  647  			unsigned long offset = offset_in_page(total_compressed);
4d3a800ebb12999 David Sterba       2017-02-14  648  			struct page *page = pages[nr_pages - 1];
c8b978188c9a0fd Chris Mason        2008-10-29  649  
c8b978188c9a0fd Chris Mason        2008-10-29  650  			/* zero the tail end of the last page, we might be
c8b978188c9a0fd Chris Mason        2008-10-29  651  			 * sending it down to disk
c8b978188c9a0fd Chris Mason        2008-10-29  652  			 */
d048b9c2a737eb7 Ira Weiny          2021-05-04  653  			if (offset)
d048b9c2a737eb7 Ira Weiny          2021-05-04  654  				memzero_page(page, offset, PAGE_SIZE - offset);
c8b978188c9a0fd Chris Mason        2008-10-29  655  			will_compress = 1;
c8b978188c9a0fd Chris Mason        2008-10-29  656  		}
c8b978188c9a0fd Chris Mason        2008-10-29  657  	}
560f7d75457f86a Li Zefan           2011-09-08  658  cont:
c8b978188c9a0fd Chris Mason        2008-10-29  659  	if (start == 0) {
c8b978188c9a0fd Chris Mason        2008-10-29  660  		/* lets try to make an inline extent */
6018ba0a0e1bc23 Timofey Titovets   2017-09-15  661  		if (ret || total_in < actual_end) {
c8b978188c9a0fd Chris Mason        2008-10-29  662  			/* we didn't compress the entire range, try
771ed689d2cd534 Chris Mason        2008-11-06  663  			 * to make an uncompressed inline extent.
c8b978188c9a0fd Chris Mason        2008-10-29  664  			 */
a0349401c14f507 Nikolay Borisov    2020-06-03  665  			ret = cow_file_range_inline(BTRFS_I(inode), start, end,
a0349401c14f507 Nikolay Borisov    2020-06-03  666  						    0, BTRFS_COMPRESS_NONE,
a0349401c14f507 Nikolay Borisov    2020-06-03  667  						    NULL);
c8b978188c9a0fd Chris Mason        2008-10-29  668  		} else {
771ed689d2cd534 Chris Mason        2008-11-06  669  			/* try making a compressed inline extent */
a0349401c14f507 Nikolay Borisov    2020-06-03  670  			ret = cow_file_range_inline(BTRFS_I(inode), start, end,
fe3f566cd19bb6d Li Zefan           2011-03-28  671  						    total_compressed,
fe3f566cd19bb6d Li Zefan           2011-03-28  672  						    compress_type, pages);
c8b978188c9a0fd Chris Mason        2008-10-29  673  		}
79787eaab46121d Jeff Mahoney       2012-03-12  674  		if (ret <= 0) {
151a41bc46df2a9 Josef Bacik        2013-07-29  675  			unsigned long clear_flags = EXTENT_DELALLOC |
8b62f87bad9cf06 Josef Bacik        2017-10-19  676  				EXTENT_DELALLOC_NEW | EXTENT_DEFRAG |
8b62f87bad9cf06 Josef Bacik        2017-10-19  677  				EXTENT_DO_ACCOUNTING;
e6eb43142a72ba3 Filipe Manana      2014-10-10  678  			unsigned long page_error_op;
e6eb43142a72ba3 Filipe Manana      2014-10-10  679  
e6eb43142a72ba3 Filipe Manana      2014-10-10  680  			page_error_op = ret < 0 ? PAGE_SET_ERROR : 0;
151a41bc46df2a9 Josef Bacik        2013-07-29  681  
771ed689d2cd534 Chris Mason        2008-11-06  682  			/*
79787eaab46121d Jeff Mahoney       2012-03-12  683  			 * inline extent creation worked or returned error,
79787eaab46121d Jeff Mahoney       2012-03-12  684  			 * we don't need to create any more async work items.
79787eaab46121d Jeff Mahoney       2012-03-12  685  			 * Unlock and free up our temp pages.
8b62f87bad9cf06 Josef Bacik        2017-10-19  686  			 *
8b62f87bad9cf06 Josef Bacik        2017-10-19  687  			 * We use DO_ACCOUNTING here because we need the
8b62f87bad9cf06 Josef Bacik        2017-10-19  688  			 * delalloc_release_metadata to be done _after_ we drop
8b62f87bad9cf06 Josef Bacik        2017-10-19  689  			 * our outstanding extent for clearing delalloc for this
8b62f87bad9cf06 Josef Bacik        2017-10-19  690  			 * range.
771ed689d2cd534 Chris Mason        2008-11-06  691  			 */
ad7ff17b65a0567 Nikolay Borisov    2020-06-03  692  			extent_clear_unlock_delalloc(BTRFS_I(inode), start, end,
ad7ff17b65a0567 Nikolay Borisov    2020-06-03  693  						     NULL,
74e9194afb2c5c6 Nikolay Borisov    2019-07-17  694  						     clear_flags,
ba8b04c1d4adbc6 Qu Wenruo          2016-07-19  695  						     PAGE_UNLOCK |
6869b0a8be775e9 Qu Wenruo          2021-01-26  696  						     PAGE_START_WRITEBACK |
e6eb43142a72ba3 Filipe Manana      2014-10-10  697  						     page_error_op |
c2790a2e2bc8240 Josef Bacik        2013-07-29  698  						     PAGE_END_WRITEBACK);
cecc8d9038d164e Nikolay Borisov    2019-07-17  699  
1e6e238c3002ea3 Qu Wenruo          2020-07-28  700  			/*
1e6e238c3002ea3 Qu Wenruo          2020-07-28  701  			 * Ensure we only free the compressed pages if we have
1e6e238c3002ea3 Qu Wenruo          2020-07-28  702  			 * them allocated, as we can still reach here with
1e6e238c3002ea3 Qu Wenruo          2020-07-28  703  			 * inode_need_compress() == false.
1e6e238c3002ea3 Qu Wenruo          2020-07-28  704  			 */
1e6e238c3002ea3 Qu Wenruo          2020-07-28  705  			if (pages) {
cecc8d9038d164e Nikolay Borisov    2019-07-17  706  				for (i = 0; i < nr_pages; i++) {
cecc8d9038d164e Nikolay Borisov    2019-07-17  707  					WARN_ON(pages[i]->mapping);
cecc8d9038d164e Nikolay Borisov    2019-07-17  708  					put_page(pages[i]);
cecc8d9038d164e Nikolay Borisov    2019-07-17  709  				}
cecc8d9038d164e Nikolay Borisov    2019-07-17  710  				kfree(pages);
1e6e238c3002ea3 Qu Wenruo          2020-07-28  711  			}
cecc8d9038d164e Nikolay Borisov    2019-07-17  712  			return 0;
c8b978188c9a0fd Chris Mason        2008-10-29  713  		}
c8b978188c9a0fd Chris Mason        2008-10-29  714  	}
c8b978188c9a0fd Chris Mason        2008-10-29  715  
c8b978188c9a0fd Chris Mason        2008-10-29  716  	if (will_compress) {
c8b978188c9a0fd Chris Mason        2008-10-29  717  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  718  		 * we aren't doing an inline extent round the compressed size
c8b978188c9a0fd Chris Mason        2008-10-29  719  		 * up to a block size boundary so the allocator does sane
c8b978188c9a0fd Chris Mason        2008-10-29  720  		 * things
c8b978188c9a0fd Chris Mason        2008-10-29  721  		 */
fda2832febb1928 Qu Wenruo          2013-02-26  722  		total_compressed = ALIGN(total_compressed, blocksize);
c8b978188c9a0fd Chris Mason        2008-10-29  723  
c8b978188c9a0fd Chris Mason        2008-10-29  724  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  725  		 * one last check to make sure the compression is really a
170607ebd9c891d Timofey Titovets   2017-06-06  726  		 * win, compare the page count read with the blocks on disk,
170607ebd9c891d Timofey Titovets   2017-06-06  727  		 * compression must free at least one sector size
c8b978188c9a0fd Chris Mason        2008-10-29  728  		 */
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  729  		total_in = ALIGN(total_in, PAGE_SIZE);
170607ebd9c891d Timofey Titovets   2017-06-06  730  		if (total_compressed + blocksize <= total_in) {
ac3e99334d640b6 Nikolay Borisov    2019-07-17  731  			compressed_extents++;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  732  
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  733  			/*
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  734  			 * The async work queues will take care of doing actual
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  735  			 * allocation on disk for these compressed pages, and
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  736  			 * will submit them to the elevator.
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  737  			 */
b5326271e791ea9 Nikolay Borisov    2019-03-12  738  			add_async_extent(async_chunk, start, total_in,
4d3a800ebb12999 David Sterba       2017-02-14  739  					total_compressed, pages, nr_pages,
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  740  					compress_type);
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  741  
1170862d783a3b4 Timofey Titovets   2017-10-03  742  			if (start + total_in < end) {
1170862d783a3b4 Timofey Titovets   2017-10-03  743  				start += total_in;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  744  				pages = NULL;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  745  				cond_resched();
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  746  				goto again;
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  747  			}
ac3e99334d640b6 Nikolay Borisov    2019-07-17  748  			return compressed_extents;
c8b978188c9a0fd Chris Mason        2008-10-29  749  		}
c8b978188c9a0fd Chris Mason        2008-10-29  750  	}
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  751  	if (pages) {
c8b978188c9a0fd Chris Mason        2008-10-29  752  		/*
c8b978188c9a0fd Chris Mason        2008-10-29  753  		 * the compression code ran but failed to make things smaller,
c8b978188c9a0fd Chris Mason        2008-10-29  754  		 * free any pages it allocated and our page pointer array
c8b978188c9a0fd Chris Mason        2008-10-29  755  		 */
4d3a800ebb12999 David Sterba       2017-02-14  756  		for (i = 0; i < nr_pages; i++) {
70b99e6959a4c28 Chris Mason        2008-10-31  757  			WARN_ON(pages[i]->mapping);
09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01  758  			put_page(pages[i]);
c8b978188c9a0fd Chris Mason        2008-10-29  759  		}
c8b978188c9a0fd Chris Mason        2008-10-29  760  		kfree(pages);
c8b978188c9a0fd Chris Mason        2008-10-29  761  		pages = NULL;
c8b978188c9a0fd Chris Mason        2008-10-29  762  		total_compressed = 0;
4d3a800ebb12999 David Sterba       2017-02-14  763  		nr_pages = 0;
c8b978188c9a0fd Chris Mason        2008-10-29  764  
c8b978188c9a0fd Chris Mason        2008-10-29  765  		/* flag the file so we don't compress in the future */
0b246afa62b0cf5 Jeff Mahoney       2016-06-22  766  		if (!btrfs_test_opt(fs_info, FORCE_COMPRESS) &&
b52aa8c93e1fec9 David Sterba       2017-07-17  767  		    !(BTRFS_I(inode)->prop_compress)) {
6cbff00f4632c80 Christoph Hellwig  2009-04-17  768  			BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
c8b978188c9a0fd Chris Mason        2008-10-29  769  		}
1e701a3292e25a6 Chris Mason        2010-03-11  770  	}
f03d9301f15fb69 Chris Mason        2009-02-04  771  cleanup_and_bail_uncompressed:
771ed689d2cd534 Chris Mason        2008-11-06  772  	/*
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  773  	 * No compression, but we still need to write the pages in the file
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  774  	 * we've been given so far.  redirty the locked page if it corresponds
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  775  	 * to our extent and set things up for the async work queue to run
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  776  	 * cow_file_range to do the normal delalloc dance.
771ed689d2cd534 Chris Mason        2008-11-06  777  	 */
1d53c9e6723022b Chris Mason        2019-07-10  778  	if (async_chunk->locked_page &&
1d53c9e6723022b Chris Mason        2019-07-10  779  	    (page_offset(async_chunk->locked_page) >= start &&
1d53c9e6723022b Chris Mason        2019-07-10  780  	     page_offset(async_chunk->locked_page)) <= end) {
1368c6dac7f10a1 Nikolay Borisov    2019-03-12  781  		__set_page_dirty_nobuffers(async_chunk->locked_page);
771ed689d2cd534 Chris Mason        2008-11-06  782  		/* unlocked later on in the async handlers */
1d53c9e6723022b Chris Mason        2019-07-10  783  	}
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  784  
4adaa611020fa6a Chris Mason        2013-03-26  785  	if (redirty)
4adaa611020fa6a Chris Mason        2013-03-26  786  		extent_range_redirty_for_io(inode, start, end);
b5326271e791ea9 Nikolay Borisov    2019-03-12  787  	add_async_extent(async_chunk, start, end - start + 1, 0, NULL, 0,
c8bb0c8bd22a4b9 Ashish Samant      2016-03-25  788  			 BTRFS_COMPRESS_NONE);
ac3e99334d640b6 Nikolay Borisov    2019-07-17  789  	compressed_extents++;
3b951516ed703af Chris Mason        2008-04-17  790  
ac3e99334d640b6 Nikolay Borisov    2019-07-17  791  	return compressed_extents;
771ed689d2cd534 Chris Mason        2008-11-06  792  }
771ed689d2cd534 Chris Mason        2008-11-06  793  

:::::: The code at line 569 was first introduced by commit
:::::: 069eac7850890acf0d3c21a6c8ca9f33ddb34a0d btrfs: use predefined limits for calculating maximum number of pages for compression

:::::: TO: David Sterba <dsterba@suse.com>
:::::: CC: David Sterba <dsterba@suse.com>

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

             reply	other threads:[~2021-11-26 18:22 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-26 18:22 kernel test robot [this message]
2021-11-26 18:22 ` fs/btrfs/inode.c:569:2: error: call to __compiletime_assert_921 declared with 'error' attribute: BUILD_BUG_ON failed: (BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0 kernel test robot
2021-11-29 19:33 ` Nick Desaulniers
2021-11-29 19:33   ` Nick Desaulniers

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=202111270255.UYOoN5VN-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=ojeda@kernel.org \
    /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.