From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D4D672 for ; Fri, 26 Nov 2021 18:22:16 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10180"; a="233197026" X-IronPort-AV: E=Sophos;i="5.87,266,1631602800"; d="scan'208";a="233197026" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Nov 2021 10:22:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,266,1631602800"; d="scan'208";a="592878312" Received: from lkp-server02.sh.intel.com (HELO 9e1e9f9b3bcb) ([10.239.97.151]) by FMSMGA003.fm.intel.com with ESMTP; 26 Nov 2021 10:22:12 -0800 Received: from kbuild by 9e1e9f9b3bcb with local (Exim 4.92) (envelope-from ) id 1mqfrO-0008QQ-QY; Fri, 26 Nov 2021 18:22:10 +0000 Date: Sat, 27 Nov 2021 02:22:05 +0800 From: kernel test robot To: Nick Desaulniers Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org, linux-kernel@vger.kernel.org, Miguel Ojeda , Nathan Chancellor , Kees Cook 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 Message-ID: <202111270255.UYOoN5VN-lkp@intel.com> Precedence: bulk X-Mailing-List: llvm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) 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 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(); \ ^ :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(); \ ^ :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 :::::: CC: David Sterba --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============6514181788234717037==" MIME-Version: 1.0 From: kernel test robot 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 Message-ID: <202111270255.UYOoN5VN-lkp@intel.com> List-Id: --===============6514181788234717037== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git = master head: a4849f6000e29235a2707f22e39da6b897bb9543 commit: b83a908498d68fafca931e1276e145b339cac5fb compiler_attributes.h: mov= e __compiletime_{error|warning} date: 3 months ago config: hexagon-randconfig-r034-20211126 (https://download.01.org/0day-ci/a= rchive/20211127/202111270255.UYOoN5VN-lkp(a)intel.com/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 5162b5= 58d8c0b542e752b037e72a69d5fd51eb1e) reproduce (this is a W=3D1 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.gi= t/commit/?id=3Db83a908498d68fafca931e1276e145b339cac5fb git remote add linus https://git.kernel.org/pub/scm/linux/kernel/gi= t/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=3D$HOME/0day COMPILER=3Dclang make.cross W=3D= 1 O=3Dbuild_dir ARCH=3Dhexagon SHELL=3D/bin/bash fs/btrfs/ prepare If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot 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) !=3D 0 BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) !=3D 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 'compile= time_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COU= NTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compil= etime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:303:4: note: expanded from macro '__compi= letime_assert' prefix ## suffix(); \ ^ :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) !=3D 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 'compile= time_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COU= NTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compil= etime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:303:4: note: expanded from macro '__compi= letime_assert' prefix ## suffix(); \ ^ :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 r= ange of pages that have already been 771ed689d2cd534 Chris Mason 2008-11-06 516 * locked (both pages a= nd 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 man= y 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 frien= ds. c8b978188c9a0fd Chris Mason 2008-10-29 523 * 771ed689d2cd534 Chris Mason 2008-11-06 524 * If this code finds i= t 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 s= ame 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 com= press_file_range(struct async_chunk *async_chunk) b888db2bd7b67f1 Chris Mason 2007-08-27 531 { 1368c6dac7f10a1 Nikolay Borisov 2019-03-12 532 struct inode *inode = =3D async_chunk->inode; 0b246afa62b0cf5 Jeff Mahoney 2016-06-22 533 struct btrfs_fs_info *= fs_info =3D btrfs_sb(inode->i_sb); 0b246afa62b0cf5 Jeff Mahoney 2016-06-22 534 u64 blocksize =3D fs_i= nfo->sectorsize; 1368c6dac7f10a1 Nikolay Borisov 2019-03-12 535 u64 start =3D async_ch= unk->start; 1368c6dac7f10a1 Nikolay Borisov 2019-03-12 536 u64 end =3D async_chun= k->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 =3D 0; c8b978188c9a0fd Chris Mason 2008-10-29 540 struct page **pages = =3D NULL; c8b978188c9a0fd Chris Mason 2008-10-29 541 unsigned long nr_pages; c8b978188c9a0fd Chris Mason 2008-10-29 542 unsigned long total_co= mpressed =3D 0; c8b978188c9a0fd Chris Mason 2008-10-29 543 unsigned long total_in= =3D 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 =3D = fs_info->compress_type; ac3e99334d640b6 Nikolay Borisov 2019-07-17 547 int compressed_extents= =3D 0; 4adaa611020fa6a Chris Mason 2013-03-26 548 int redirty =3D 0; b888db2bd7b67f1 Chris Mason 2007-08-27 549 = 6158e1ce1cc620d Nikolay Borisov 2017-02-20 550 inode_should_defrag(BT= RFS_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_s= ize before now because it could change in between d98da49977f6739 Josef Bacik 2019-10-11 555 * us evaluating the s= ize 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 =3D i_size_read= (inode); d98da49977f6739 Josef Bacik 2019-10-11 564 barrier(); d98da49977f6739 Josef Bacik 2019-10-11 565 actual_end =3D min_t(u= 64, i_size, end + 1); c8b978188c9a0fd Chris Mason 2008-10-29 566 again: c8b978188c9a0fd Chris Mason 2008-10-29 567 will_compress =3D 0; 09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01 568 nr_pages =3D (end >> P= AGE_SHIFT) - (start >> PAGE_SHIFT) + 1; 069eac7850890ac David Sterba 2017-02-14 @569 BUILD_BUG_ON((BTRFS_MA= X_COMPRESSED % PAGE_SIZE) !=3D 0); 069eac7850890ac David Sterba 2017-02-14 570 nr_pages =3D min_t(uns= igned 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 se= nd 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 c= an 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 corne= r. f03d9301f15fb69 Chris Mason 2009-02-04 582 */ f03d9301f15fb69 Chris Mason 2009-02-04 583 if (actual_end <=3D st= art) 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 =3D a= ctual_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 fo= r a small file range(<=3Dblocksize) that 0132761017e012a Nicholas D Steeves 2016-05-19 590 * isn't an inline ext= ent, 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 <= =3D 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 =3D m= in_t(unsigned long, total_compressed, 069eac7850890ac David Sterba 2017-02-14 597 BTRFS_MAX_UNCOMPRESS= ED); c8b978188c9a0fd Chris Mason 2008-10-29 598 total_in =3D 0; c8b978188c9a0fd Chris Mason 2008-10-29 599 ret =3D 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 f= or 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_compres= s(BTRFS_I(inode), start, end)) { c8b978188c9a0fd Chris Mason 2008-10-29 607 WARN_ON(pages); 31e818fe7375d60 David Sterba 2015-02-20 608 pages =3D 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 =3D 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)->d= efrag_compress) eec63c65dcbeb14 David Sterba 2017-07-17 616 compress_type =3D BT= RFS_I(inode)->defrag_compress; eec63c65dcbeb14 David Sterba 2017-07-17 617 else if (BTRFS_I(inod= e)->prop_compress) b52aa8c93e1fec9 David Sterba 2017-07-17 618 compress_type =3D BT= RFS_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 cl= ear_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 rema= ining 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_d= irty_for_io(inode, start, end); 4adaa611020fa6a Chris Mason 2013-03-26 634 redirty =3D 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 =3D btrfs_compres= s_pages( f51d2b59120ff36 David Sterba 2017-09-15 639 compress_type | (fs_= info->compress_level << 4), 261507a02ccba9a Li Zefan 2010-12-17 640 inode->i_mappin= g, 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_compress= ed); 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= =3D offset_in_page(total_compressed); 4d3a800ebb12999 David Sterba 2017-02-14 648 struct page *page = =3D 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 t= o 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 =3D 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 =3D=3D 0) { c8b978188c9a0fd Chris Mason 2008-10-29 660 /* lets try to make a= n 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 compres= s the entire range, try 771ed689d2cd534 Chris Mason 2008-11-06 663 * to make an uncomp= ressed inline extent. c8b978188c9a0fd Chris Mason 2008-10-29 664 */ a0349401c14f507 Nikolay Borisov 2020-06-03 665 ret =3D cow_file_ran= ge_inline(BTRFS_I(inode), start, end, a0349401c14f507 Nikolay Borisov 2020-06-03 666 0, BTRFS_COMP= RESS_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 comp= ressed inline extent */ a0349401c14f507 Nikolay Borisov 2020-06-03 670 ret =3D cow_file_ran= ge_inline(BTRFS_I(inode), start, end, fe3f566cd19bb6d Li Zefan 2011-03-28 671 total_compres= sed, 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 <=3D 0) { 151a41bc46df2a9 Josef Bacik 2013-07-29 675 unsigned long clear_= flags =3D EXTENT_DELALLOC | 8b62f87bad9cf06 Josef Bacik 2017-10-19 676 EXTENT_DELALLOC_NEW= | EXTENT_DEFRAG | 8b62f87bad9cf06 Josef Bacik 2017-10-19 677 EXTENT_DO_ACCOUNTIN= G; e6eb43142a72ba3 Filipe Manana 2014-10-10 678 unsigned long page_e= rror_op; e6eb43142a72ba3 Filipe Manana 2014-10-10 679 = e6eb43142a72ba3 Filipe Manana 2014-10-10 680 page_error_op =3D re= t < 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 cre= ation 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 u= p our temp pages. 8b62f87bad9cf06 Josef Bacik 2017-10-19 686 * 8b62f87bad9cf06 Josef Bacik 2017-10-19 687 * We use DO_ACCOUNT= ING 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 e= xtent 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_W= RITEBACK | e6eb43142a72ba3 Filipe Manana 2014-10-10 697 page_error_o= p | c2790a2e2bc8240 Josef Bacik 2013-07-29 698 PAGE_END_WRI= TEBACK); cecc8d9038d164e Nikolay Borisov 2019-07-17 699 = 1e6e238c3002ea3 Qu Wenruo 2020-07-28 700 /* 1e6e238c3002ea3 Qu Wenruo 2020-07-28 701 * Ensure we only fr= ee the compressed pages if we have 1e6e238c3002ea3 Qu Wenruo 2020-07-28 702 * them allocated, a= s we can still reach here with 1e6e238c3002ea3 Qu Wenruo 2020-07-28 703 * inode_need_compre= ss() =3D=3D 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 =3D 0; i < n= r_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 =3D = 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 p= age count read with the blocks on disk, 170607ebd9c891d Timofey Titovets 2017-06-06 727 * compression must f= ree at least one sector size c8b978188c9a0fd Chris Mason 2008-10-29 728 */ 09cbfeaf1a5a67b Kirill A. Shutemov 2016-04-01 729 total_in =3D ALIGN(to= tal_in, PAGE_SIZE); 170607ebd9c891d Timofey Titovets 2017-06-06 730 if (total_compressed = + blocksize <=3D 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 qu= eues will take care of doing actual c8bb0c8bd22a4b9 Ashish Samant 2016-03-25 735 * allocation on dis= k 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(asy= nc_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 +=3D total_in; c8bb0c8bd22a4b9 Ashish Samant 2016-03-25 744 pages =3D 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_ex= tents; 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 co= de 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 =3D 0; i < nr_= pages; i++) { 70b99e6959a4c28 Chris Mason 2008-10-31 757 WARN_ON(pages[i]->ma= pping); 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 =3D NULL; c8b978188c9a0fd Chris Mason 2008-10-29 762 total_compressed =3D = 0; 4d3a800ebb12999 David Sterba 2017-02-14 763 nr_pages =3D 0; c8b978188c9a0fd Chris Mason 2008-10-29 764 = c8b978188c9a0fd Chris Mason 2008-10-29 765 /* flag the file so w= e don't compress in the future */ 0b246afa62b0cf5 Jeff Mahoney 2016-06-22 766 if (!btrfs_test_opt(f= s_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)->flag= s |=3D 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_uncomp= ressed: 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 s= et things up for the async work queue to run c8bb0c8bd22a4b9 Ashish Samant 2016-03-25 776 * cow_file_range to d= o the normal delalloc dance. 771ed689d2cd534 Chris Mason 2008-11-06 777 */ 1d53c9e6723022b Chris Mason 2019-07-10 778 if (async_chunk->locke= d_page && 1d53c9e6723022b Chris Mason 2019-07-10 779 (page_offset(async= _chunk->locked_page) >=3D start && 1d53c9e6723022b Chris Mason 2019-07-10 780 page_offset(async= _chunk->locked_page)) <=3D end) { 1368c6dac7f10a1 Nikolay Borisov 2019-03-12 781 __set_page_dirty_nobu= ffers(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_exte= nts; 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 limit= s for calculating maximum number of pages for compression :::::: TO: David Sterba :::::: CC: David Sterba --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============6514181788234717037==--