Hi Qu, Thank you for the patch! Yet something to improve: [auto build test ERROR on kdave/for-next] [also build test ERROR on next-20201210] [cannot apply to v5.10-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Qu-Wenruo/btrfs-add-read-only-support-for-subpage-sector-size/20201210-144442 base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next config: i386-randconfig-a013-20201209 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/e01cdf51d0d32647697616c0dd08f2cc3220bde4 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Qu-Wenruo/btrfs-add-read-only-support-for-subpage-sector-size/20201210-144442 git checkout e01cdf51d0d32647697616c0dd08f2cc3220bde4 # save the attached .config to linux build tree make W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): ld: fs/btrfs/disk-io.o: in function `validate_subpage_buffer': >> fs/btrfs/disk-io.c:619: undefined reference to `__udivdi3' vim +619 fs/btrfs/disk-io.c 593 594 static int validate_subpage_buffer(struct page *page, u64 start, u64 end, 595 int mirror) 596 { 597 struct btrfs_fs_info *fs_info = btrfs_sb(page->mapping->host->i_sb); 598 struct extent_buffer *eb; 599 int reads_done; 600 int ret = 0; 601 602 if (!IS_ALIGNED(start, fs_info->sectorsize) || 603 !IS_ALIGNED(end - start + 1, fs_info->sectorsize) || 604 !IS_ALIGNED(end - start + 1, fs_info->nodesize)) { 605 WARN_ON(IS_ENABLED(CONFIG_BTRFS_DEBUG)); 606 btrfs_err(fs_info, "invalid tree read bytenr"); 607 return -EUCLEAN; 608 } 609 610 /* 611 * We don't allow bio merge for subpage metadata read, so we should 612 * only get one eb for each endio hook. 613 */ 614 ASSERT(end == start + fs_info->nodesize - 1); 615 ASSERT(PagePrivate(page)); 616 617 rcu_read_lock(); 618 eb = radix_tree_lookup(&fs_info->buffer_radix, > 619 start / fs_info->sectorsize); 620 rcu_read_unlock(); 621 622 /* 623 * When we are reading one tree block, eb must have been 624 * inserted into the radix tree. If not something is wrong. 625 */ 626 if (!eb) { 627 WARN_ON(IS_ENABLED(CONFIG_BTRFS_DEBUG)); 628 btrfs_err(fs_info, 629 "can't find extent buffer for bytenr %llu", 630 start); 631 return -EUCLEAN; 632 } 633 /* 634 * The pending IO might have been the only thing that kept 635 * this buffer in memory. Make sure we have a ref for all 636 * this other checks 637 */ 638 atomic_inc(&eb->refs); 639 640 reads_done = atomic_dec_and_test(&eb->io_pages); 641 /* Subpage read must finish in page read */ 642 ASSERT(reads_done); 643 644 eb->read_mirror = mirror; 645 if (test_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags)) { 646 ret = -EIO; 647 goto err; 648 } 649 ret = validate_extent_buffer(eb); 650 if (ret < 0) 651 goto err; 652 653 if (test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags)) 654 btree_readahead_hook(eb, ret); 655 656 set_extent_buffer_uptodate(eb); 657 658 free_extent_buffer(eb); 659 return ret; 660 err: 661 /* 662 * our io error hook is going to dec the io pages 663 * again, we have to make sure it has something to 664 * decrement 665 */ 666 atomic_inc(&eb->io_pages); 667 clear_extent_buffer_uptodate(eb); 668 free_extent_buffer(eb); 669 return ret; 670 } 671 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org