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
From: kernel test robot
Date: Fri Nov 26 2021 - 13:24:26 EST
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@xxxxxxxxx/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@xxxxxxxxx>
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@xxxxxxxx>
:::::: CC: David Sterba <dsterba@xxxxxxxx>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx