All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Josef Bacik <josef@toxicpanda.com>,
	linux-btrfs@vger.kernel.org, kernel-team@fb.com
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH 2/5] btrfs: convert block group bit field to use bit helpers
Date: Fri, 15 Jul 2022 06:40:48 +0800	[thread overview]
Message-ID: <202207150643.6MYJm2hT-lkp@intel.com> (raw)
In-Reply-To: <2d97c27f8441f0ebbcadd8b22a628ed94b16cf6b.1657758678.git.josef@toxicpanda.com>

Hi Josef,

I love your patch! Yet something to improve:

[auto build test ERROR on kdave/for-next]
[also build test ERROR on next-20220714]
[cannot apply to linus/master v5.19-rc6]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Josef-Bacik/btrfs-block-group-cleanups/20220714-083606
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: hexagon-randconfig-r045-20220714 (https://download.01.org/0day-ci/archive/20220715/202207150643.6MYJm2hT-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 5e61b9c556267086ef9b743a0b57df302eef831b)
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://github.com/intel-lab-lkp/linux/commit/d82c8630686065ad13f9a0a3b73284f9aa3beb2d
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Josef-Bacik/btrfs-block-group-cleanups/20220714-083606
        git checkout d82c8630686065ad13f9a0a3b73284f9aa3beb2d
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash fs/btrfs/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> fs/btrfs/block-group.c:1056:24: error: no member named 'zone_is_active' in 'struct btrfs_block_group'
                   WARN_ON(block_group->zone_is_active &&
                           ~~~~~~~~~~~  ^
   include/asm-generic/bug.h:122:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   fs/btrfs/block-group.c:1061:19: error: no member named 'zone_is_active' in 'struct btrfs_block_group'
           if (block_group->zone_is_active)
               ~~~~~~~~~~~  ^
   fs/btrfs/block-group.c:2118:34: error: no member named 'zone_is_active' in 'struct btrfs_block_group'
                                   cache->zone_unusable, cache->zone_is_active,
                                                         ~~~~~  ^
   fs/btrfs/block-group.c:2571:12: error: no member named 'zone_is_active' in 'struct btrfs_block_group'
                                   cache->zone_is_active, &cache->space_info);
                                   ~~~~~  ^
   4 errors generated.
--
>> fs/btrfs/zoned.c:2269:43: error: no member named 'zone_is_active' in 'struct btrfs_block_group'
                                   if (btrfs_zoned_bg_is_full(bg) || bg->zone_is_active) {
                                                                     ~~  ^
   1 error generated.


vim +1056 fs/btrfs/block-group.c

7357623a7f4beb4 Qu Wenruo          2020-05-05   888  
e3e0520b32bc3db Josef Bacik        2019-06-20   889  int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
e3e0520b32bc3db Josef Bacik        2019-06-20   890  			     u64 group_start, struct extent_map *em)
e3e0520b32bc3db Josef Bacik        2019-06-20   891  {
e3e0520b32bc3db Josef Bacik        2019-06-20   892  	struct btrfs_fs_info *fs_info = trans->fs_info;
e3e0520b32bc3db Josef Bacik        2019-06-20   893  	struct btrfs_path *path;
32da5386d9a4fd5 David Sterba       2019-10-29   894  	struct btrfs_block_group *block_group;
e3e0520b32bc3db Josef Bacik        2019-06-20   895  	struct btrfs_free_cluster *cluster;
e3e0520b32bc3db Josef Bacik        2019-06-20   896  	struct inode *inode;
e3e0520b32bc3db Josef Bacik        2019-06-20   897  	struct kobject *kobj = NULL;
e3e0520b32bc3db Josef Bacik        2019-06-20   898  	int ret;
e3e0520b32bc3db Josef Bacik        2019-06-20   899  	int index;
e3e0520b32bc3db Josef Bacik        2019-06-20   900  	int factor;
e3e0520b32bc3db Josef Bacik        2019-06-20   901  	struct btrfs_caching_control *caching_ctl = NULL;
e3e0520b32bc3db Josef Bacik        2019-06-20   902  	bool remove_em;
e3e0520b32bc3db Josef Bacik        2019-06-20   903  	bool remove_rsv = false;
e3e0520b32bc3db Josef Bacik        2019-06-20   904  
e3e0520b32bc3db Josef Bacik        2019-06-20   905  	block_group = btrfs_lookup_block_group(fs_info, group_start);
e3e0520b32bc3db Josef Bacik        2019-06-20   906  	BUG_ON(!block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20   907  	BUG_ON(!block_group->ro);
e3e0520b32bc3db Josef Bacik        2019-06-20   908  
e3e0520b32bc3db Josef Bacik        2019-06-20   909  	trace_btrfs_remove_block_group(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20   910  	/*
e3e0520b32bc3db Josef Bacik        2019-06-20   911  	 * Free the reserved super bytes from this block group before
e3e0520b32bc3db Josef Bacik        2019-06-20   912  	 * remove it.
e3e0520b32bc3db Josef Bacik        2019-06-20   913  	 */
e3e0520b32bc3db Josef Bacik        2019-06-20   914  	btrfs_free_excluded_extents(block_group);
b3470b5dbe1300d David Sterba       2019-10-23   915  	btrfs_free_ref_tree_range(fs_info, block_group->start,
b3470b5dbe1300d David Sterba       2019-10-23   916  				  block_group->length);
e3e0520b32bc3db Josef Bacik        2019-06-20   917  
e3e0520b32bc3db Josef Bacik        2019-06-20   918  	index = btrfs_bg_flags_to_raid_index(block_group->flags);
e3e0520b32bc3db Josef Bacik        2019-06-20   919  	factor = btrfs_bg_type_to_factor(block_group->flags);
e3e0520b32bc3db Josef Bacik        2019-06-20   920  
e3e0520b32bc3db Josef Bacik        2019-06-20   921  	/* make sure this block group isn't part of an allocation cluster */
e3e0520b32bc3db Josef Bacik        2019-06-20   922  	cluster = &fs_info->data_alloc_cluster;
e3e0520b32bc3db Josef Bacik        2019-06-20   923  	spin_lock(&cluster->refill_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   924  	btrfs_return_cluster_to_free_space(block_group, cluster);
e3e0520b32bc3db Josef Bacik        2019-06-20   925  	spin_unlock(&cluster->refill_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   926  
e3e0520b32bc3db Josef Bacik        2019-06-20   927  	/*
e3e0520b32bc3db Josef Bacik        2019-06-20   928  	 * make sure this block group isn't part of a metadata
e3e0520b32bc3db Josef Bacik        2019-06-20   929  	 * allocation cluster
e3e0520b32bc3db Josef Bacik        2019-06-20   930  	 */
e3e0520b32bc3db Josef Bacik        2019-06-20   931  	cluster = &fs_info->meta_alloc_cluster;
e3e0520b32bc3db Josef Bacik        2019-06-20   932  	spin_lock(&cluster->refill_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   933  	btrfs_return_cluster_to_free_space(block_group, cluster);
e3e0520b32bc3db Josef Bacik        2019-06-20   934  	spin_unlock(&cluster->refill_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   935  
40ab3be102f0a61 Naohiro Aota       2021-02-04   936  	btrfs_clear_treelog_bg(block_group);
c2707a255623435 Johannes Thumshirn 2021-09-09   937  	btrfs_clear_data_reloc_bg(block_group);
40ab3be102f0a61 Naohiro Aota       2021-02-04   938  
e3e0520b32bc3db Josef Bacik        2019-06-20   939  	path = btrfs_alloc_path();
e3e0520b32bc3db Josef Bacik        2019-06-20   940  	if (!path) {
e3e0520b32bc3db Josef Bacik        2019-06-20   941  		ret = -ENOMEM;
9fecd13202f520f Filipe Manana      2020-06-01   942  		goto out;
e3e0520b32bc3db Josef Bacik        2019-06-20   943  	}
e3e0520b32bc3db Josef Bacik        2019-06-20   944  
e3e0520b32bc3db Josef Bacik        2019-06-20   945  	/*
e3e0520b32bc3db Josef Bacik        2019-06-20   946  	 * get the inode first so any iput calls done for the io_list
e3e0520b32bc3db Josef Bacik        2019-06-20   947  	 * aren't the final iput (no unlinks allowed now)
e3e0520b32bc3db Josef Bacik        2019-06-20   948  	 */
e3e0520b32bc3db Josef Bacik        2019-06-20   949  	inode = lookup_free_space_inode(block_group, path);
e3e0520b32bc3db Josef Bacik        2019-06-20   950  
e3e0520b32bc3db Josef Bacik        2019-06-20   951  	mutex_lock(&trans->transaction->cache_write_mutex);
e3e0520b32bc3db Josef Bacik        2019-06-20   952  	/*
e3e0520b32bc3db Josef Bacik        2019-06-20   953  	 * Make sure our free space cache IO is done before removing the
e3e0520b32bc3db Josef Bacik        2019-06-20   954  	 * free space inode
e3e0520b32bc3db Josef Bacik        2019-06-20   955  	 */
e3e0520b32bc3db Josef Bacik        2019-06-20   956  	spin_lock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   957  	if (!list_empty(&block_group->io_list)) {
e3e0520b32bc3db Josef Bacik        2019-06-20   958  		list_del_init(&block_group->io_list);
e3e0520b32bc3db Josef Bacik        2019-06-20   959  
e3e0520b32bc3db Josef Bacik        2019-06-20   960  		WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode);
e3e0520b32bc3db Josef Bacik        2019-06-20   961  
e3e0520b32bc3db Josef Bacik        2019-06-20   962  		spin_unlock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   963  		btrfs_wait_cache_io(trans, block_group, path);
e3e0520b32bc3db Josef Bacik        2019-06-20   964  		btrfs_put_block_group(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20   965  		spin_lock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   966  	}
e3e0520b32bc3db Josef Bacik        2019-06-20   967  
e3e0520b32bc3db Josef Bacik        2019-06-20   968  	if (!list_empty(&block_group->dirty_list)) {
e3e0520b32bc3db Josef Bacik        2019-06-20   969  		list_del_init(&block_group->dirty_list);
e3e0520b32bc3db Josef Bacik        2019-06-20   970  		remove_rsv = true;
e3e0520b32bc3db Josef Bacik        2019-06-20   971  		btrfs_put_block_group(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20   972  	}
e3e0520b32bc3db Josef Bacik        2019-06-20   973  	spin_unlock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   974  	mutex_unlock(&trans->transaction->cache_write_mutex);
e3e0520b32bc3db Josef Bacik        2019-06-20   975  
36b216c85eb9d7f Boris Burkov       2020-11-18   976  	ret = btrfs_remove_free_space_inode(trans, inode, block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20   977  	if (ret)
9fecd13202f520f Filipe Manana      2020-06-01   978  		goto out;
e3e0520b32bc3db Josef Bacik        2019-06-20   979  
16b0c2581e3a81e Filipe Manana      2022-04-13   980  	write_lock(&fs_info->block_group_cache_lock);
08dddb2951c96b5 Filipe Manana      2022-04-13   981  	rb_erase_cached(&block_group->cache_node,
e3e0520b32bc3db Josef Bacik        2019-06-20   982  			&fs_info->block_group_cache_tree);
e3e0520b32bc3db Josef Bacik        2019-06-20   983  	RB_CLEAR_NODE(&block_group->cache_node);
e3e0520b32bc3db Josef Bacik        2019-06-20   984  
9fecd13202f520f Filipe Manana      2020-06-01   985  	/* Once for the block groups rbtree */
9fecd13202f520f Filipe Manana      2020-06-01   986  	btrfs_put_block_group(block_group);
9fecd13202f520f Filipe Manana      2020-06-01   987  
16b0c2581e3a81e Filipe Manana      2022-04-13   988  	write_unlock(&fs_info->block_group_cache_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20   989  
e3e0520b32bc3db Josef Bacik        2019-06-20   990  	down_write(&block_group->space_info->groups_sem);
e3e0520b32bc3db Josef Bacik        2019-06-20   991  	/*
e3e0520b32bc3db Josef Bacik        2019-06-20   992  	 * we must use list_del_init so people can check to see if they
e3e0520b32bc3db Josef Bacik        2019-06-20   993  	 * are still on the list after taking the semaphore
e3e0520b32bc3db Josef Bacik        2019-06-20   994  	 */
e3e0520b32bc3db Josef Bacik        2019-06-20   995  	list_del_init(&block_group->list);
e3e0520b32bc3db Josef Bacik        2019-06-20   996  	if (list_empty(&block_group->space_info->block_groups[index])) {
e3e0520b32bc3db Josef Bacik        2019-06-20   997  		kobj = block_group->space_info->block_group_kobjs[index];
e3e0520b32bc3db Josef Bacik        2019-06-20   998  		block_group->space_info->block_group_kobjs[index] = NULL;
e3e0520b32bc3db Josef Bacik        2019-06-20   999  		clear_avail_alloc_bits(fs_info, block_group->flags);
e3e0520b32bc3db Josef Bacik        2019-06-20  1000  	}
e3e0520b32bc3db Josef Bacik        2019-06-20  1001  	up_write(&block_group->space_info->groups_sem);
e3e0520b32bc3db Josef Bacik        2019-06-20  1002  	clear_incompat_bg_bits(fs_info, block_group->flags);
e3e0520b32bc3db Josef Bacik        2019-06-20  1003  	if (kobj) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1004  		kobject_del(kobj);
e3e0520b32bc3db Josef Bacik        2019-06-20  1005  		kobject_put(kobj);
e3e0520b32bc3db Josef Bacik        2019-06-20  1006  	}
e3e0520b32bc3db Josef Bacik        2019-06-20  1007  
d82c8630686065a Josef Bacik        2022-07-13  1008  	if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL,
d82c8630686065a Josef Bacik        2022-07-13  1009  		     &block_group->runtime_flags))
e3e0520b32bc3db Josef Bacik        2019-06-20  1010  		caching_ctl = btrfs_get_caching_control(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20  1011  	if (block_group->cached == BTRFS_CACHE_STARTED)
e3e0520b32bc3db Josef Bacik        2019-06-20  1012  		btrfs_wait_block_group_cache_done(block_group);
d82c8630686065a Josef Bacik        2022-07-13  1013  	if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL,
d82c8630686065a Josef Bacik        2022-07-13  1014  		     &block_group->runtime_flags)) {
16b0c2581e3a81e Filipe Manana      2022-04-13  1015  		write_lock(&fs_info->block_group_cache_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1016  		if (!caching_ctl) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1017  			struct btrfs_caching_control *ctl;
e3e0520b32bc3db Josef Bacik        2019-06-20  1018  
e3e0520b32bc3db Josef Bacik        2019-06-20  1019  			list_for_each_entry(ctl,
e3e0520b32bc3db Josef Bacik        2019-06-20  1020  				    &fs_info->caching_block_groups, list)
e3e0520b32bc3db Josef Bacik        2019-06-20  1021  				if (ctl->block_group == block_group) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1022  					caching_ctl = ctl;
e3e0520b32bc3db Josef Bacik        2019-06-20  1023  					refcount_inc(&caching_ctl->count);
e3e0520b32bc3db Josef Bacik        2019-06-20  1024  					break;
e3e0520b32bc3db Josef Bacik        2019-06-20  1025  				}
e3e0520b32bc3db Josef Bacik        2019-06-20  1026  		}
e3e0520b32bc3db Josef Bacik        2019-06-20  1027  		if (caching_ctl)
e3e0520b32bc3db Josef Bacik        2019-06-20  1028  			list_del_init(&caching_ctl->list);
16b0c2581e3a81e Filipe Manana      2022-04-13  1029  		write_unlock(&fs_info->block_group_cache_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1030  		if (caching_ctl) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1031  			/* Once for the caching bgs list and once for us. */
e3e0520b32bc3db Josef Bacik        2019-06-20  1032  			btrfs_put_caching_control(caching_ctl);
e3e0520b32bc3db Josef Bacik        2019-06-20  1033  			btrfs_put_caching_control(caching_ctl);
e3e0520b32bc3db Josef Bacik        2019-06-20  1034  		}
e3e0520b32bc3db Josef Bacik        2019-06-20  1035  	}
e3e0520b32bc3db Josef Bacik        2019-06-20  1036  
e3e0520b32bc3db Josef Bacik        2019-06-20  1037  	spin_lock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1038  	WARN_ON(!list_empty(&block_group->dirty_list));
e3e0520b32bc3db Josef Bacik        2019-06-20  1039  	WARN_ON(!list_empty(&block_group->io_list));
e3e0520b32bc3db Josef Bacik        2019-06-20  1040  	spin_unlock(&trans->transaction->dirty_bgs_lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1041  
e3e0520b32bc3db Josef Bacik        2019-06-20  1042  	btrfs_remove_free_space_cache(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20  1043  
e3e0520b32bc3db Josef Bacik        2019-06-20  1044  	spin_lock(&block_group->space_info->lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1045  	list_del_init(&block_group->ro_list);
e3e0520b32bc3db Josef Bacik        2019-06-20  1046  
e3e0520b32bc3db Josef Bacik        2019-06-20  1047  	if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1048  		WARN_ON(block_group->space_info->total_bytes
b3470b5dbe1300d David Sterba       2019-10-23  1049  			< block_group->length);
e3e0520b32bc3db Josef Bacik        2019-06-20  1050  		WARN_ON(block_group->space_info->bytes_readonly
169e0da91a21a57 Naohiro Aota       2021-02-04  1051  			< block_group->length - block_group->zone_unusable);
169e0da91a21a57 Naohiro Aota       2021-02-04  1052  		WARN_ON(block_group->space_info->bytes_zone_unusable
169e0da91a21a57 Naohiro Aota       2021-02-04  1053  			< block_group->zone_unusable);
e3e0520b32bc3db Josef Bacik        2019-06-20  1054  		WARN_ON(block_group->space_info->disk_total
b3470b5dbe1300d David Sterba       2019-10-23  1055  			< block_group->length * factor);
5c21202df2c7336 Naohiro Aota       2022-07-09 @1056  		WARN_ON(block_group->zone_is_active &&
5c21202df2c7336 Naohiro Aota       2022-07-09  1057  			block_group->space_info->active_total_bytes
5c21202df2c7336 Naohiro Aota       2022-07-09  1058  			< block_group->length);
e3e0520b32bc3db Josef Bacik        2019-06-20  1059  	}
b3470b5dbe1300d David Sterba       2019-10-23  1060  	block_group->space_info->total_bytes -= block_group->length;
5c21202df2c7336 Naohiro Aota       2022-07-09  1061  	if (block_group->zone_is_active)
5c21202df2c7336 Naohiro Aota       2022-07-09  1062  		block_group->space_info->active_total_bytes -= block_group->length;
169e0da91a21a57 Naohiro Aota       2021-02-04  1063  	block_group->space_info->bytes_readonly -=
169e0da91a21a57 Naohiro Aota       2021-02-04  1064  		(block_group->length - block_group->zone_unusable);
169e0da91a21a57 Naohiro Aota       2021-02-04  1065  	block_group->space_info->bytes_zone_unusable -=
169e0da91a21a57 Naohiro Aota       2021-02-04  1066  		block_group->zone_unusable;
b3470b5dbe1300d David Sterba       2019-10-23  1067  	block_group->space_info->disk_total -= block_group->length * factor;
e3e0520b32bc3db Josef Bacik        2019-06-20  1068  
e3e0520b32bc3db Josef Bacik        2019-06-20  1069  	spin_unlock(&block_group->space_info->lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1070  
ffcb9d44572afba Filipe Manana      2020-06-01  1071  	/*
ffcb9d44572afba Filipe Manana      2020-06-01  1072  	 * Remove the free space for the block group from the free space tree
ffcb9d44572afba Filipe Manana      2020-06-01  1073  	 * and the block group's item from the extent tree before marking the
ffcb9d44572afba Filipe Manana      2020-06-01  1074  	 * block group as removed. This is to prevent races with tasks that
ffcb9d44572afba Filipe Manana      2020-06-01  1075  	 * freeze and unfreeze a block group, this task and another task
ffcb9d44572afba Filipe Manana      2020-06-01  1076  	 * allocating a new block group - the unfreeze task ends up removing
ffcb9d44572afba Filipe Manana      2020-06-01  1077  	 * the block group's extent map before the task calling this function
ffcb9d44572afba Filipe Manana      2020-06-01  1078  	 * deletes the block group item from the extent tree, allowing for
ffcb9d44572afba Filipe Manana      2020-06-01  1079  	 * another task to attempt to create another block group with the same
ffcb9d44572afba Filipe Manana      2020-06-01  1080  	 * item key (and failing with -EEXIST and a transaction abort).
ffcb9d44572afba Filipe Manana      2020-06-01  1081  	 */
ffcb9d44572afba Filipe Manana      2020-06-01  1082  	ret = remove_block_group_free_space(trans, block_group);
ffcb9d44572afba Filipe Manana      2020-06-01  1083  	if (ret)
ffcb9d44572afba Filipe Manana      2020-06-01  1084  		goto out;
ffcb9d44572afba Filipe Manana      2020-06-01  1085  
ffcb9d44572afba Filipe Manana      2020-06-01  1086  	ret = remove_block_group_item(trans, path, block_group);
ffcb9d44572afba Filipe Manana      2020-06-01  1087  	if (ret < 0)
ffcb9d44572afba Filipe Manana      2020-06-01  1088  		goto out;
ffcb9d44572afba Filipe Manana      2020-06-01  1089  
e3e0520b32bc3db Josef Bacik        2019-06-20  1090  	spin_lock(&block_group->lock);
d82c8630686065a Josef Bacik        2022-07-13  1091  	set_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags);
d82c8630686065a Josef Bacik        2022-07-13  1092  
e3e0520b32bc3db Josef Bacik        2019-06-20  1093  	/*
6b7304af62d02d7 Filipe Manana      2020-05-08  1094  	 * At this point trimming or scrub can't start on this block group,
6b7304af62d02d7 Filipe Manana      2020-05-08  1095  	 * because we removed the block group from the rbtree
6b7304af62d02d7 Filipe Manana      2020-05-08  1096  	 * fs_info->block_group_cache_tree so no one can't find it anymore and
6b7304af62d02d7 Filipe Manana      2020-05-08  1097  	 * even if someone already got this block group before we removed it
6b7304af62d02d7 Filipe Manana      2020-05-08  1098  	 * from the rbtree, they have already incremented block_group->frozen -
6b7304af62d02d7 Filipe Manana      2020-05-08  1099  	 * if they didn't, for the trimming case they won't find any free space
6b7304af62d02d7 Filipe Manana      2020-05-08  1100  	 * entries because we already removed them all when we called
6b7304af62d02d7 Filipe Manana      2020-05-08  1101  	 * btrfs_remove_free_space_cache().
e3e0520b32bc3db Josef Bacik        2019-06-20  1102  	 *
e3e0520b32bc3db Josef Bacik        2019-06-20  1103  	 * And we must not remove the extent map from the fs_info->mapping_tree
e3e0520b32bc3db Josef Bacik        2019-06-20  1104  	 * to prevent the same logical address range and physical device space
6b7304af62d02d7 Filipe Manana      2020-05-08  1105  	 * ranges from being reused for a new block group. This is needed to
6b7304af62d02d7 Filipe Manana      2020-05-08  1106  	 * avoid races with trimming and scrub.
6b7304af62d02d7 Filipe Manana      2020-05-08  1107  	 *
6b7304af62d02d7 Filipe Manana      2020-05-08  1108  	 * An fs trim operation (btrfs_trim_fs() / btrfs_ioctl_fitrim()) is
e3e0520b32bc3db Josef Bacik        2019-06-20  1109  	 * completely transactionless, so while it is trimming a range the
e3e0520b32bc3db Josef Bacik        2019-06-20  1110  	 * currently running transaction might finish and a new one start,
e3e0520b32bc3db Josef Bacik        2019-06-20  1111  	 * allowing for new block groups to be created that can reuse the same
e3e0520b32bc3db Josef Bacik        2019-06-20  1112  	 * physical device locations unless we take this special care.
e3e0520b32bc3db Josef Bacik        2019-06-20  1113  	 *
e3e0520b32bc3db Josef Bacik        2019-06-20  1114  	 * There may also be an implicit trim operation if the file system
e3e0520b32bc3db Josef Bacik        2019-06-20  1115  	 * is mounted with -odiscard. The same protections must remain
e3e0520b32bc3db Josef Bacik        2019-06-20  1116  	 * in place until the extents have been discarded completely when
e3e0520b32bc3db Josef Bacik        2019-06-20  1117  	 * the transaction commit has completed.
e3e0520b32bc3db Josef Bacik        2019-06-20  1118  	 */
6b7304af62d02d7 Filipe Manana      2020-05-08  1119  	remove_em = (atomic_read(&block_group->frozen) == 0);
e3e0520b32bc3db Josef Bacik        2019-06-20  1120  	spin_unlock(&block_group->lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1121  
e3e0520b32bc3db Josef Bacik        2019-06-20  1122  	if (remove_em) {
e3e0520b32bc3db Josef Bacik        2019-06-20  1123  		struct extent_map_tree *em_tree;
e3e0520b32bc3db Josef Bacik        2019-06-20  1124  
e3e0520b32bc3db Josef Bacik        2019-06-20  1125  		em_tree = &fs_info->mapping_tree;
e3e0520b32bc3db Josef Bacik        2019-06-20  1126  		write_lock(&em_tree->lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1127  		remove_extent_mapping(em_tree, em);
e3e0520b32bc3db Josef Bacik        2019-06-20  1128  		write_unlock(&em_tree->lock);
e3e0520b32bc3db Josef Bacik        2019-06-20  1129  		/* once for the tree */
e3e0520b32bc3db Josef Bacik        2019-06-20  1130  		free_extent_map(em);
e3e0520b32bc3db Josef Bacik        2019-06-20  1131  	}
f6033c5e333238f Xiyu Yang          2020-04-21  1132  
9fecd13202f520f Filipe Manana      2020-06-01  1133  out:
f6033c5e333238f Xiyu Yang          2020-04-21  1134  	/* Once for the lookup reference */
f6033c5e333238f Xiyu Yang          2020-04-21  1135  	btrfs_put_block_group(block_group);
e3e0520b32bc3db Josef Bacik        2019-06-20  1136  	if (remove_rsv)
e3e0520b32bc3db Josef Bacik        2019-06-20  1137  		btrfs_delayed_refs_rsv_release(fs_info, 1);
e3e0520b32bc3db Josef Bacik        2019-06-20  1138  	btrfs_free_path(path);
e3e0520b32bc3db Josef Bacik        2019-06-20  1139  	return ret;
e3e0520b32bc3db Josef Bacik        2019-06-20  1140  }
e3e0520b32bc3db Josef Bacik        2019-06-20  1141  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

  parent reply	other threads:[~2022-07-14 22:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-14  0:34 [PATCH 0/5] btrfs: block group cleanups Josef Bacik
2022-07-14  0:34 ` [PATCH 1/5] btrfs: use btrfs_fs_closing for background bg work Josef Bacik
2022-07-14  7:18   ` Johannes Thumshirn
2022-07-14  0:34 ` [PATCH 2/5] btrfs: convert block group bit field to use bit helpers Josef Bacik
2022-07-14  7:21   ` Johannes Thumshirn
2022-07-14 22:40   ` kernel test robot [this message]
2022-07-14  0:34 ` [PATCH 3/5] btrfs: remove block_group->lock protection for TO_COPY Josef Bacik
2022-07-14  7:23   ` Johannes Thumshirn
2022-07-14  0:34 ` [PATCH 4/5] btrfs: simplify btrfs_put_block_group_cache Josef Bacik
2022-07-14  9:04   ` Johannes Thumshirn
2022-07-14  0:34 ` [PATCH 5/5] btrfs: remove BLOCK_GROUP_FLAG_HAS_CACHING_CTL Josef Bacik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202207150643.6MYJm2hT-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=josef@toxicpanda.com \
    --cc=kbuild-all@lists.01.org \
    --cc=kernel-team@fb.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.