Hi, Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on kdave/for-next] [also build test WARNING on v5.12-rc7 next-20210414] [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/fdmanana-kernel-org/btrfs-zoned-fix-unpaired-block-group-unfreeze-during-device-replace/20210414-201003 base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next config: x86_64-randconfig-r033-20210414 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 9829f5e6b1bca9b61efc629770d28bb9014dec45) 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 # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://github.com/0day-ci/linux/commit/31f44555b4f7341b558a9062f0977e8fe817045d git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review fdmanana-kernel-org/btrfs-zoned-fix-unpaired-block-group-unfreeze-during-device-replace/20210414-201003 git checkout 31f44555b4f7341b558a9062f0977e8fe817045d # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> All warnings (new ones prefixed by >>): >> fs/btrfs/scrub.c:3836:1: warning: unused label 'done' [-Wunused-label] done: ^~~~~ 1 warning generated. vim +/done +3836 fs/btrfs/scrub.c de17addce7a20d Naohiro Aota 2021-02-04 3586 a2de733c78fa7a Arne Jansen 2011-03-08 3587 static noinline_for_stack a36cf8b8933e4a Stefan Behrens 2012-11-02 3588 int scrub_enumerate_chunks(struct scrub_ctx *sctx, 32934280967d00 Omar Sandoval 2018-08-14 3589 struct btrfs_device *scrub_dev, u64 start, u64 end) a2de733c78fa7a Arne Jansen 2011-03-08 3590 { a2de733c78fa7a Arne Jansen 2011-03-08 3591 struct btrfs_dev_extent *dev_extent = NULL; a2de733c78fa7a Arne Jansen 2011-03-08 3592 struct btrfs_path *path; 0b246afa62b0cf Jeff Mahoney 2016-06-22 3593 struct btrfs_fs_info *fs_info = sctx->fs_info; 0b246afa62b0cf Jeff Mahoney 2016-06-22 3594 struct btrfs_root *root = fs_info->dev_root; a2de733c78fa7a Arne Jansen 2011-03-08 3595 u64 length; a2de733c78fa7a Arne Jansen 2011-03-08 3596 u64 chunk_offset; 55e3a601c81cdc Zhaolei 2015-08-05 3597 int ret = 0; 76a8efa171bf6c Zhaolei 2015-11-17 3598 int ro_set; a2de733c78fa7a Arne Jansen 2011-03-08 3599 int slot; a2de733c78fa7a Arne Jansen 2011-03-08 3600 struct extent_buffer *l; a2de733c78fa7a Arne Jansen 2011-03-08 3601 struct btrfs_key key; a2de733c78fa7a Arne Jansen 2011-03-08 3602 struct btrfs_key found_key; 32da5386d9a4fd David Sterba 2019-10-29 3603 struct btrfs_block_group *cache; ff023aac31198e Stefan Behrens 2012-11-06 3604 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; a2de733c78fa7a Arne Jansen 2011-03-08 3605 a2de733c78fa7a Arne Jansen 2011-03-08 3606 path = btrfs_alloc_path(); a2de733c78fa7a Arne Jansen 2011-03-08 3607 if (!path) a2de733c78fa7a Arne Jansen 2011-03-08 3608 return -ENOMEM; a2de733c78fa7a Arne Jansen 2011-03-08 3609 e4058b54d1e442 David Sterba 2015-11-27 3610 path->reada = READA_FORWARD; a2de733c78fa7a Arne Jansen 2011-03-08 3611 path->search_commit_root = 1; a2de733c78fa7a Arne Jansen 2011-03-08 3612 path->skip_locking = 1; a2de733c78fa7a Arne Jansen 2011-03-08 3613 a36cf8b8933e4a Stefan Behrens 2012-11-02 3614 key.objectid = scrub_dev->devid; a2de733c78fa7a Arne Jansen 2011-03-08 3615 key.offset = 0ull; a2de733c78fa7a Arne Jansen 2011-03-08 3616 key.type = BTRFS_DEV_EXTENT_KEY; a2de733c78fa7a Arne Jansen 2011-03-08 3617 a2de733c78fa7a Arne Jansen 2011-03-08 3618 while (1) { a2de733c78fa7a Arne Jansen 2011-03-08 3619 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); a2de733c78fa7a Arne Jansen 2011-03-08 3620 if (ret < 0) 8c51032f978bac Arne Jansen 2011-06-03 3621 break; 8c51032f978bac Arne Jansen 2011-06-03 3622 if (ret > 0) { 8c51032f978bac Arne Jansen 2011-06-03 3623 if (path->slots[0] >= 8c51032f978bac Arne Jansen 2011-06-03 3624 btrfs_header_nritems(path->nodes[0])) { 8c51032f978bac Arne Jansen 2011-06-03 3625 ret = btrfs_next_leaf(root, path); 55e3a601c81cdc Zhaolei 2015-08-05 3626 if (ret < 0) 55e3a601c81cdc Zhaolei 2015-08-05 3627 break; 55e3a601c81cdc Zhaolei 2015-08-05 3628 if (ret > 0) { 55e3a601c81cdc Zhaolei 2015-08-05 3629 ret = 0; 8c51032f978bac Arne Jansen 2011-06-03 3630 break; 8c51032f978bac Arne Jansen 2011-06-03 3631 } 55e3a601c81cdc Zhaolei 2015-08-05 3632 } else { 55e3a601c81cdc Zhaolei 2015-08-05 3633 ret = 0; 55e3a601c81cdc Zhaolei 2015-08-05 3634 } 8c51032f978bac Arne Jansen 2011-06-03 3635 } a2de733c78fa7a Arne Jansen 2011-03-08 3636 a2de733c78fa7a Arne Jansen 2011-03-08 3637 l = path->nodes[0]; a2de733c78fa7a Arne Jansen 2011-03-08 3638 slot = path->slots[0]; a2de733c78fa7a Arne Jansen 2011-03-08 3639 a2de733c78fa7a Arne Jansen 2011-03-08 3640 btrfs_item_key_to_cpu(l, &found_key, slot); a2de733c78fa7a Arne Jansen 2011-03-08 3641 a36cf8b8933e4a Stefan Behrens 2012-11-02 3642 if (found_key.objectid != scrub_dev->devid) a2de733c78fa7a Arne Jansen 2011-03-08 3643 break; a2de733c78fa7a Arne Jansen 2011-03-08 3644 962a298f35110e David Sterba 2014-06-04 3645 if (found_key.type != BTRFS_DEV_EXTENT_KEY) a2de733c78fa7a Arne Jansen 2011-03-08 3646 break; a2de733c78fa7a Arne Jansen 2011-03-08 3647 a2de733c78fa7a Arne Jansen 2011-03-08 3648 if (found_key.offset >= end) a2de733c78fa7a Arne Jansen 2011-03-08 3649 break; a2de733c78fa7a Arne Jansen 2011-03-08 3650 a2de733c78fa7a Arne Jansen 2011-03-08 3651 if (found_key.offset < key.offset) a2de733c78fa7a Arne Jansen 2011-03-08 3652 break; a2de733c78fa7a Arne Jansen 2011-03-08 3653 a2de733c78fa7a Arne Jansen 2011-03-08 3654 dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent); a2de733c78fa7a Arne Jansen 2011-03-08 3655 length = btrfs_dev_extent_length(l, dev_extent); a2de733c78fa7a Arne Jansen 2011-03-08 3656 ced96edc48ba45 Qu Wenruo 2014-06-19 3657 if (found_key.offset + length <= start) ced96edc48ba45 Qu Wenruo 2014-06-19 3658 goto skip; a2de733c78fa7a Arne Jansen 2011-03-08 3659 a2de733c78fa7a Arne Jansen 2011-03-08 3660 chunk_offset = btrfs_dev_extent_chunk_offset(l, dev_extent); a2de733c78fa7a Arne Jansen 2011-03-08 3661 a2de733c78fa7a Arne Jansen 2011-03-08 3662 /* a2de733c78fa7a Arne Jansen 2011-03-08 3663 * get a reference on the corresponding block group to prevent a2de733c78fa7a Arne Jansen 2011-03-08 3664 * the chunk from going away while we scrub it a2de733c78fa7a Arne Jansen 2011-03-08 3665 */ a2de733c78fa7a Arne Jansen 2011-03-08 3666 cache = btrfs_lookup_block_group(fs_info, chunk_offset); ced96edc48ba45 Qu Wenruo 2014-06-19 3667 ced96edc48ba45 Qu Wenruo 2014-06-19 3668 /* some chunks are removed but not committed to disk yet, ced96edc48ba45 Qu Wenruo 2014-06-19 3669 * continue scrubbing */ ced96edc48ba45 Qu Wenruo 2014-06-19 3670 if (!cache) ced96edc48ba45 Qu Wenruo 2014-06-19 3671 goto skip; ced96edc48ba45 Qu Wenruo 2014-06-19 3672 78ce9fc269af6e Naohiro Aota 2021-02-04 3673 if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) { 78ce9fc269af6e Naohiro Aota 2021-02-04 3674 spin_lock(&cache->lock); 78ce9fc269af6e Naohiro Aota 2021-02-04 3675 if (!cache->to_copy) { 78ce9fc269af6e Naohiro Aota 2021-02-04 3676 spin_unlock(&cache->lock); 31f44555b4f734 Filipe Manana 2021-04-14 3677 btrfs_put_block_group(cache); 31f44555b4f734 Filipe Manana 2021-04-14 3678 goto skip; 78ce9fc269af6e Naohiro Aota 2021-02-04 3679 } 78ce9fc269af6e Naohiro Aota 2021-02-04 3680 spin_unlock(&cache->lock); 78ce9fc269af6e Naohiro Aota 2021-02-04 3681 } 78ce9fc269af6e Naohiro Aota 2021-02-04 3682 2473d24f2b77da Filipe Manana 2020-05-08 3683 /* 2473d24f2b77da Filipe Manana 2020-05-08 3684 * Make sure that while we are scrubbing the corresponding block 2473d24f2b77da Filipe Manana 2020-05-08 3685 * group doesn't get its logical address and its device extents 2473d24f2b77da Filipe Manana 2020-05-08 3686 * reused for another block group, which can possibly be of a 2473d24f2b77da Filipe Manana 2020-05-08 3687 * different type and different profile. We do this to prevent 2473d24f2b77da Filipe Manana 2020-05-08 3688 * false error detections and crashes due to bogus attempts to 2473d24f2b77da Filipe Manana 2020-05-08 3689 * repair extents. 2473d24f2b77da Filipe Manana 2020-05-08 3690 */ 2473d24f2b77da Filipe Manana 2020-05-08 3691 spin_lock(&cache->lock); 2473d24f2b77da Filipe Manana 2020-05-08 3692 if (cache->removed) { 2473d24f2b77da Filipe Manana 2020-05-08 3693 spin_unlock(&cache->lock); 2473d24f2b77da Filipe Manana 2020-05-08 3694 btrfs_put_block_group(cache); 2473d24f2b77da Filipe Manana 2020-05-08 3695 goto skip; 2473d24f2b77da Filipe Manana 2020-05-08 3696 } 6b7304af62d02d Filipe Manana 2020-05-08 3697 btrfs_freeze_block_group(cache); 2473d24f2b77da Filipe Manana 2020-05-08 3698 spin_unlock(&cache->lock); 2473d24f2b77da Filipe Manana 2020-05-08 3699 55e3a601c81cdc Zhaolei 2015-08-05 3700 /* 55e3a601c81cdc Zhaolei 2015-08-05 3701 * we need call btrfs_inc_block_group_ro() with scrubs_paused, 55e3a601c81cdc Zhaolei 2015-08-05 3702 * to avoid deadlock caused by: 55e3a601c81cdc Zhaolei 2015-08-05 3703 * btrfs_inc_block_group_ro() 55e3a601c81cdc Zhaolei 2015-08-05 3704 * -> btrfs_wait_for_commit() 55e3a601c81cdc Zhaolei 2015-08-05 3705 * -> btrfs_commit_transaction() 55e3a601c81cdc Zhaolei 2015-08-05 3706 * -> btrfs_scrub_pause() 55e3a601c81cdc Zhaolei 2015-08-05 3707 */ 55e3a601c81cdc Zhaolei 2015-08-05 3708 scrub_pause_on(fs_info); b12de52896c0e8 Qu Wenruo 2019-11-15 3709 b12de52896c0e8 Qu Wenruo 2019-11-15 3710 /* b12de52896c0e8 Qu Wenruo 2019-11-15 3711 * Don't do chunk preallocation for scrub. b12de52896c0e8 Qu Wenruo 2019-11-15 3712 * b12de52896c0e8 Qu Wenruo 2019-11-15 3713 * This is especially important for SYSTEM bgs, or we can hit b12de52896c0e8 Qu Wenruo 2019-11-15 3714 * -EFBIG from btrfs_finish_chunk_alloc() like: b12de52896c0e8 Qu Wenruo 2019-11-15 3715 * 1. The only SYSTEM bg is marked RO. b12de52896c0e8 Qu Wenruo 2019-11-15 3716 * Since SYSTEM bg is small, that's pretty common. b12de52896c0e8 Qu Wenruo 2019-11-15 3717 * 2. New SYSTEM bg will be allocated b12de52896c0e8 Qu Wenruo 2019-11-15 3718 * Due to regular version will allocate new chunk. b12de52896c0e8 Qu Wenruo 2019-11-15 3719 * 3. New SYSTEM bg is empty and will get cleaned up b12de52896c0e8 Qu Wenruo 2019-11-15 3720 * Before cleanup really happens, it's marked RO again. b12de52896c0e8 Qu Wenruo 2019-11-15 3721 * 4. Empty SYSTEM bg get scrubbed b12de52896c0e8 Qu Wenruo 2019-11-15 3722 * We go back to 2. b12de52896c0e8 Qu Wenruo 2019-11-15 3723 * b12de52896c0e8 Qu Wenruo 2019-11-15 3724 * This can easily boost the amount of SYSTEM chunks if cleaner b12de52896c0e8 Qu Wenruo 2019-11-15 3725 * thread can't be triggered fast enough, and use up all space b12de52896c0e8 Qu Wenruo 2019-11-15 3726 * of btrfs_super_block::sys_chunk_array 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3727 * 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3728 * While for dev replace, we need to try our best to mark block 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3729 * group RO, to prevent race between: 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3730 * - Write duplication 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3731 * Contains latest data 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3732 * - Scrub copy 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3733 * Contains data from commit tree 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3734 * 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3735 * If target block group is not marked RO, nocow writes can 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3736 * be overwritten by scrub copy, causing data corruption. 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3737 * So for dev-replace, it's not allowed to continue if a block 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3738 * group is not RO. b12de52896c0e8 Qu Wenruo 2019-11-15 3739 */ 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3740 ret = btrfs_inc_block_group_ro(cache, sctx->is_dev_replace); de17addce7a20d Naohiro Aota 2021-02-04 3741 if (!ret && sctx->is_dev_replace) { de17addce7a20d Naohiro Aota 2021-02-04 3742 ret = finish_extent_writes_for_zoned(root, cache); de17addce7a20d Naohiro Aota 2021-02-04 3743 if (ret) { de17addce7a20d Naohiro Aota 2021-02-04 3744 btrfs_dec_block_group_ro(cache); de17addce7a20d Naohiro Aota 2021-02-04 3745 scrub_pause_off(fs_info); de17addce7a20d Naohiro Aota 2021-02-04 3746 btrfs_put_block_group(cache); de17addce7a20d Naohiro Aota 2021-02-04 3747 break; de17addce7a20d Naohiro Aota 2021-02-04 3748 } de17addce7a20d Naohiro Aota 2021-02-04 3749 } de17addce7a20d Naohiro Aota 2021-02-04 3750 76a8efa171bf6c Zhaolei 2015-11-17 3751 if (ret == 0) { 76a8efa171bf6c Zhaolei 2015-11-17 3752 ro_set = 1; 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3753 } else if (ret == -ENOSPC && !sctx->is_dev_replace) { 76a8efa171bf6c Zhaolei 2015-11-17 3754 /* 76a8efa171bf6c Zhaolei 2015-11-17 3755 * btrfs_inc_block_group_ro return -ENOSPC when it 76a8efa171bf6c Zhaolei 2015-11-17 3756 * failed in creating new chunk for metadata. 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3757 * It is not a problem for scrub, because 76a8efa171bf6c Zhaolei 2015-11-17 3758 * metadata are always cowed, and our scrub paused 76a8efa171bf6c Zhaolei 2015-11-17 3759 * commit_transactions. 76a8efa171bf6c Zhaolei 2015-11-17 3760 */ 76a8efa171bf6c Zhaolei 2015-11-17 3761 ro_set = 0; 195a49eaf655eb Filipe Manana 2021-02-05 3762 } else if (ret == -ETXTBSY) { 195a49eaf655eb Filipe Manana 2021-02-05 3763 btrfs_warn(fs_info, 195a49eaf655eb Filipe Manana 2021-02-05 3764 "skipping scrub of block group %llu due to active swapfile", 195a49eaf655eb Filipe Manana 2021-02-05 3765 cache->start); 195a49eaf655eb Filipe Manana 2021-02-05 3766 scrub_pause_off(fs_info); 195a49eaf655eb Filipe Manana 2021-02-05 3767 ret = 0; 195a49eaf655eb Filipe Manana 2021-02-05 3768 goto skip_unfreeze; 76a8efa171bf6c Zhaolei 2015-11-17 3769 } else { 5d163e0e68ce74 Jeff Mahoney 2016-09-20 3770 btrfs_warn(fs_info, 913e153572218c David Sterba 2017-07-13 3771 "failed setting block group ro: %d", ret); 6b7304af62d02d Filipe Manana 2020-05-08 3772 btrfs_unfreeze_block_group(cache); 55e3a601c81cdc Zhaolei 2015-08-05 3773 btrfs_put_block_group(cache); 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3774 scrub_pause_off(fs_info); 55e3a601c81cdc Zhaolei 2015-08-05 3775 break; 55e3a601c81cdc Zhaolei 2015-08-05 3776 } 55e3a601c81cdc Zhaolei 2015-08-05 3777 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3778 /* 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3779 * Now the target block is marked RO, wait for nocow writes to 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3780 * finish before dev-replace. 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3781 * COW is fine, as COW never overwrites extents in commit tree. 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3782 */ 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3783 if (sctx->is_dev_replace) { 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3784 btrfs_wait_nocow_writers(cache); 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3785 btrfs_wait_ordered_roots(fs_info, U64_MAX, cache->start, 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3786 cache->length); 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3787 } 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3788 1bbb97b8ce7ddf Qu Wenruo 2020-01-24 3789 scrub_pause_off(fs_info); 3ec17a67cc340b Dan Carpenter 2019-10-31 3790 down_write(&dev_replace->rwsem); ff023aac31198e Stefan Behrens 2012-11-06 3791 dev_replace->cursor_right = found_key.offset + length; ff023aac31198e Stefan Behrens 2012-11-06 3792 dev_replace->cursor_left = found_key.offset; ff023aac31198e Stefan Behrens 2012-11-06 3793 dev_replace->item_needs_writeback = 1; cb5583dd52fab4 David Sterba 2018-09-07 3794 up_write(&dev_replace->rwsem); cb5583dd52fab4 David Sterba 2018-09-07 3795 8c204c9657c32e Zhao Lei 2015-08-19 3796 ret = scrub_chunk(sctx, scrub_dev, chunk_offset, length, 32934280967d00 Omar Sandoval 2018-08-14 3797 found_key.offset, cache); ff023aac31198e Stefan Behrens 2012-11-06 3798 ff023aac31198e Stefan Behrens 2012-11-06 3799 /* ff023aac31198e Stefan Behrens 2012-11-06 3800 * flush, submit all pending read and write bios, afterwards ff023aac31198e Stefan Behrens 2012-11-06 3801 * wait for them. ff023aac31198e Stefan Behrens 2012-11-06 3802 * Note that in the dev replace case, a read request causes ff023aac31198e Stefan Behrens 2012-11-06 3803 * write requests that are submitted in the read completion ff023aac31198e Stefan Behrens 2012-11-06 3804 * worker. Therefore in the current situation, it is required ff023aac31198e Stefan Behrens 2012-11-06 3805 * that all write requests are flushed, so that all read and ff023aac31198e Stefan Behrens 2012-11-06 3806 * write requests are really completed when bios_in_flight ff023aac31198e Stefan Behrens 2012-11-06 3807 * changes to 0. ff023aac31198e Stefan Behrens 2012-11-06 3808 */ 2073c4c2e51a93 David Sterba 2017-03-31 3809 sctx->flush_all_writes = true; ff023aac31198e Stefan Behrens 2012-11-06 3810 scrub_submit(sctx); 3fb99303c64e31 David Sterba 2017-05-16 3811 mutex_lock(&sctx->wr_lock); ff023aac31198e Stefan Behrens 2012-11-06 3812 scrub_wr_submit(sctx); 3fb99303c64e31 David Sterba 2017-05-16 3813 mutex_unlock(&sctx->wr_lock); ff023aac31198e Stefan Behrens 2012-11-06 3814 ff023aac31198e Stefan Behrens 2012-11-06 3815 wait_event(sctx->list_wait, ff023aac31198e Stefan Behrens 2012-11-06 3816 atomic_read(&sctx->bios_in_flight) == 0); b708ce969af3ce Zhaolei 2015-08-05 3817 b708ce969af3ce Zhaolei 2015-08-05 3818 scrub_pause_on(fs_info); 12cf93728dfba2 Wang Shilong 2014-02-19 3819 12cf93728dfba2 Wang Shilong 2014-02-19 3820 /* 12cf93728dfba2 Wang Shilong 2014-02-19 3821 * must be called before we decrease @scrub_paused. 12cf93728dfba2 Wang Shilong 2014-02-19 3822 * make sure we don't block transaction commit while 12cf93728dfba2 Wang Shilong 2014-02-19 3823 * we are waiting pending workers finished. 12cf93728dfba2 Wang Shilong 2014-02-19 3824 */ ff023aac31198e Stefan Behrens 2012-11-06 3825 wait_event(sctx->list_wait, ff023aac31198e Stefan Behrens 2012-11-06 3826 atomic_read(&sctx->workers_pending) == 0); 2073c4c2e51a93 David Sterba 2017-03-31 3827 sctx->flush_all_writes = false; 12cf93728dfba2 Wang Shilong 2014-02-19 3828 b708ce969af3ce Zhaolei 2015-08-05 3829 scrub_pause_off(fs_info); ff023aac31198e Stefan Behrens 2012-11-06 3830 78ce9fc269af6e Naohiro Aota 2021-02-04 3831 if (sctx->is_dev_replace && 78ce9fc269af6e Naohiro Aota 2021-02-04 3832 !btrfs_finish_block_group_to_copy(dev_replace->srcdev, 78ce9fc269af6e Naohiro Aota 2021-02-04 3833 cache, found_key.offset)) 78ce9fc269af6e Naohiro Aota 2021-02-04 3834 ro_set = 0; 78ce9fc269af6e Naohiro Aota 2021-02-04 3835 78ce9fc269af6e Naohiro Aota 2021-02-04 @3836 done: 3ec17a67cc340b Dan Carpenter 2019-10-31 3837 down_write(&dev_replace->rwsem); 1a1a8b732c7e95 Filipe Manana 2016-05-14 3838 dev_replace->cursor_left = dev_replace->cursor_right; 1a1a8b732c7e95 Filipe Manana 2016-05-14 3839 dev_replace->item_needs_writeback = 1; 3ec17a67cc340b Dan Carpenter 2019-10-31 3840 up_write(&dev_replace->rwsem); 1a1a8b732c7e95 Filipe Manana 2016-05-14 3841 76a8efa171bf6c Zhaolei 2015-11-17 3842 if (ro_set) 2ff7e61e0d30ff Jeff Mahoney 2016-06-22 3843 btrfs_dec_block_group_ro(cache); ff023aac31198e Stefan Behrens 2012-11-06 3844 758f2dfcf8a249 Filipe Manana 2015-11-19 3845 /* 758f2dfcf8a249 Filipe Manana 2015-11-19 3846 * We might have prevented the cleaner kthread from deleting 758f2dfcf8a249 Filipe Manana 2015-11-19 3847 * this block group if it was already unused because we raced 758f2dfcf8a249 Filipe Manana 2015-11-19 3848 * and set it to RO mode first. So add it back to the unused 758f2dfcf8a249 Filipe Manana 2015-11-19 3849 * list, otherwise it might not ever be deleted unless a manual 758f2dfcf8a249 Filipe Manana 2015-11-19 3850 * balance is triggered or it becomes used and unused again. 758f2dfcf8a249 Filipe Manana 2015-11-19 3851 */ 758f2dfcf8a249 Filipe Manana 2015-11-19 3852 spin_lock(&cache->lock); 758f2dfcf8a249 Filipe Manana 2015-11-19 3853 if (!cache->removed && !cache->ro && cache->reserved == 0 && bf38be65f3703d David Sterba 2019-10-23 3854 cache->used == 0) { 758f2dfcf8a249 Filipe Manana 2015-11-19 3855 spin_unlock(&cache->lock); 6e80d4f8c422d3 Dennis Zhou 2019-12-13 3856 if (btrfs_test_opt(fs_info, DISCARD_ASYNC)) 6e80d4f8c422d3 Dennis Zhou 2019-12-13 3857 btrfs_discard_queue_work(&fs_info->discard_ctl, 6e80d4f8c422d3 Dennis Zhou 2019-12-13 3858 cache); 6e80d4f8c422d3 Dennis Zhou 2019-12-13 3859 else 031f24da2c8a7b Qu Wenruo 2018-05-22 3860 btrfs_mark_bg_unused(cache); 758f2dfcf8a249 Filipe Manana 2015-11-19 3861 } else { 758f2dfcf8a249 Filipe Manana 2015-11-19 3862 spin_unlock(&cache->lock); 758f2dfcf8a249 Filipe Manana 2015-11-19 3863 } 195a49eaf655eb Filipe Manana 2021-02-05 3864 skip_unfreeze: 6b7304af62d02d Filipe Manana 2020-05-08 3865 btrfs_unfreeze_block_group(cache); a2de733c78fa7a Arne Jansen 2011-03-08 3866 btrfs_put_block_group(cache); a2de733c78fa7a Arne Jansen 2011-03-08 3867 if (ret) a2de733c78fa7a Arne Jansen 2011-03-08 3868 break; 32934280967d00 Omar Sandoval 2018-08-14 3869 if (sctx->is_dev_replace && af1be4f851db4f Stefan Behrens 2012-11-27 3870 atomic64_read(&dev_replace->num_write_errors) > 0) { ff023aac31198e Stefan Behrens 2012-11-06 3871 ret = -EIO; ff023aac31198e Stefan Behrens 2012-11-06 3872 break; ff023aac31198e Stefan Behrens 2012-11-06 3873 } ff023aac31198e Stefan Behrens 2012-11-06 3874 if (sctx->stat.malloc_errors > 0) { ff023aac31198e Stefan Behrens 2012-11-06 3875 ret = -ENOMEM; ff023aac31198e Stefan Behrens 2012-11-06 3876 break; ff023aac31198e Stefan Behrens 2012-11-06 3877 } ced96edc48ba45 Qu Wenruo 2014-06-19 3878 skip: a2de733c78fa7a Arne Jansen 2011-03-08 3879 key.offset = found_key.offset + length; 712673339a0d08 Chris Mason 2011-05-23 3880 btrfs_release_path(path); a2de733c78fa7a Arne Jansen 2011-03-08 3881 } a2de733c78fa7a Arne Jansen 2011-03-08 3882 a2de733c78fa7a Arne Jansen 2011-03-08 3883 btrfs_free_path(path); 8c51032f978bac Arne Jansen 2011-06-03 3884 55e3a601c81cdc Zhaolei 2015-08-05 3885 return ret; a2de733c78fa7a Arne Jansen 2011-03-08 3886 } a2de733c78fa7a Arne Jansen 2011-03-08 3887 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip