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-su...
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/e01cdf51d0d32647697616c0dd08f2cc3...
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 <lkp(a)intel.com>
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