From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: fs/btrfs/relocation.c:5080 do_remap_reloc_trans() warn: variable dereferenced before check 'dest_bg' (see line 5014)
Date: Mon, 14 Sep 2026 12:39:50 +0200 [thread overview]
Message-ID: <202609141239.E9aQTPvb-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Mark Harmstone <mark@harmstone.com>
CC: David Sterba <dsterba@suse.com>
CC: Boris Burkov <boris@bur.io>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 704340f1cd0dcef829eb62f5b48ae95a2ce17bdf
commit: fd6594b1446cc753450bad8d0da6288da1ad7b96 btrfs: replace identity remaps with actual remaps when doing relocations
date: 7 months ago
:::::: branch date: 10 hours ago
:::::: commit date: 7 months ago
config: mips-randconfig-r072-20260914 (https://download.01.org/0day-ci/archive/20260914/202609141239.E9aQTPvb-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 15.2.0
smatch: v0.5.0-9187-g5189e3fb
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: fd6594b1446c ("btrfs: replace identity remaps with actual remaps when doing relocations")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202609141239.E9aQTPvb-lkp@intel.com/
smatch warnings:
fs/btrfs/relocation.c:5080 do_remap_reloc_trans() warn: variable dereferenced before check 'dest_bg' (see line 5014)
vim +/dest_bg +5080 fs/btrfs/relocation.c
b56f35560b82e7 Mark Harmstone 2026-01-07 4930
fd6594b1446cc7 Mark Harmstone 2026-01-07 4931 static int do_remap_reloc_trans(struct btrfs_fs_info *fs_info,
fd6594b1446cc7 Mark Harmstone 2026-01-07 4932 struct btrfs_block_group *src_bg,
fd6594b1446cc7 Mark Harmstone 2026-01-07 4933 struct btrfs_path *path, u64 *last_start)
fd6594b1446cc7 Mark Harmstone 2026-01-07 4934 {
fd6594b1446cc7 Mark Harmstone 2026-01-07 4935 struct btrfs_trans_handle *trans;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4936 struct btrfs_root *extent_root;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4937 struct btrfs_key ins;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4938 struct btrfs_block_group *dest_bg = NULL;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4939 u64 start = 0, remap_length = 0;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4940 u64 length, new_addr, min_size;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4941 int ret;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4942 const bool is_data = (src_bg->flags & BTRFS_BLOCK_GROUP_DATA);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4943 bool no_more = false;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4944 bool made_reservation = false, bg_needs_free_space;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4945 struct btrfs_space_info *sinfo = src_bg->space_info;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4946
fd6594b1446cc7 Mark Harmstone 2026-01-07 4947 extent_root = btrfs_extent_root(fs_info, src_bg->start);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4948
fd6594b1446cc7 Mark Harmstone 2026-01-07 4949 trans = btrfs_start_transaction(extent_root, 0);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4950 if (IS_ERR(trans))
fd6594b1446cc7 Mark Harmstone 2026-01-07 4951 return PTR_ERR(trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4952
fd6594b1446cc7 Mark Harmstone 2026-01-07 4953 mutex_lock(&fs_info->remap_mutex);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4954
fd6594b1446cc7 Mark Harmstone 2026-01-07 4955 ret = find_next_identity_remap(trans, path, src_bg->start + src_bg->length,
fd6594b1446cc7 Mark Harmstone 2026-01-07 4956 *last_start, &start, &remap_length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4957 if (ret == -ENOENT) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 4958 no_more = true;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4959 goto next;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4960 } else if (ret) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 4961 mutex_unlock(&fs_info->remap_mutex);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4962 btrfs_end_transaction(trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4963 return ret;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4964 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 4965
fd6594b1446cc7 Mark Harmstone 2026-01-07 4966 /* Try to reserve enough space for block. */
fd6594b1446cc7 Mark Harmstone 2026-01-07 4967 spin_lock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4968 btrfs_space_info_update_bytes_may_use(sinfo, remap_length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4969 spin_unlock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4970
fd6594b1446cc7 Mark Harmstone 2026-01-07 4971 if (is_data)
fd6594b1446cc7 Mark Harmstone 2026-01-07 4972 min_size = fs_info->sectorsize;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4973 else
fd6594b1446cc7 Mark Harmstone 2026-01-07 4974 min_size = fs_info->nodesize;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4975
fd6594b1446cc7 Mark Harmstone 2026-01-07 4976 /*
fd6594b1446cc7 Mark Harmstone 2026-01-07 4977 * We're using btrfs_reserve_extent() to allocate a contiguous
fd6594b1446cc7 Mark Harmstone 2026-01-07 4978 * logical address range, but this will become a remap item rather than
fd6594b1446cc7 Mark Harmstone 2026-01-07 4979 * an extent in the extent tree.
fd6594b1446cc7 Mark Harmstone 2026-01-07 4980 *
fd6594b1446cc7 Mark Harmstone 2026-01-07 4981 * Short allocations are fine: it means that we chop off the beginning
fd6594b1446cc7 Mark Harmstone 2026-01-07 4982 * of the identity remap that we're processing, and will tackle the
fd6594b1446cc7 Mark Harmstone 2026-01-07 4983 * rest of it the next time round.
fd6594b1446cc7 Mark Harmstone 2026-01-07 4984 */
fd6594b1446cc7 Mark Harmstone 2026-01-07 4985 ret = btrfs_reserve_extent(fs_info->fs_root, remap_length, remap_length,
fd6594b1446cc7 Mark Harmstone 2026-01-07 4986 min_size, 0, 0, &ins, is_data, false);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4987 if (ret) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 4988 spin_lock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4989 btrfs_space_info_update_bytes_may_use(sinfo, -remap_length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4990 spin_unlock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4991
fd6594b1446cc7 Mark Harmstone 2026-01-07 4992 mutex_unlock(&fs_info->remap_mutex);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4993 btrfs_end_transaction(trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 4994 return ret;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4995 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 4996
fd6594b1446cc7 Mark Harmstone 2026-01-07 4997 made_reservation = true;
fd6594b1446cc7 Mark Harmstone 2026-01-07 4998
fd6594b1446cc7 Mark Harmstone 2026-01-07 4999 new_addr = ins.objectid;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5000 length = ins.offset;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5001
fd6594b1446cc7 Mark Harmstone 2026-01-07 5002 if (!is_data && !IS_ALIGNED(length, fs_info->nodesize)) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 5003 u64 new_length = ALIGN_DOWN(length, fs_info->nodesize);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5004
fd6594b1446cc7 Mark Harmstone 2026-01-07 5005 btrfs_free_reserved_extent(fs_info, new_addr + new_length,
fd6594b1446cc7 Mark Harmstone 2026-01-07 5006 length - new_length, 0);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5007
fd6594b1446cc7 Mark Harmstone 2026-01-07 5008 length = new_length;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5009 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5010
fd6594b1446cc7 Mark Harmstone 2026-01-07 5011 dest_bg = btrfs_lookup_block_group(fs_info, new_addr);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5012
fd6594b1446cc7 Mark Harmstone 2026-01-07 5013 mutex_lock(&dest_bg->free_space_lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 @5014 bg_needs_free_space = test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE,
fd6594b1446cc7 Mark Harmstone 2026-01-07 5015 &dest_bg->runtime_flags);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5016 mutex_unlock(&dest_bg->free_space_lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5017
fd6594b1446cc7 Mark Harmstone 2026-01-07 5018 if (bg_needs_free_space) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 5019 ret = btrfs_add_block_group_free_space(trans, dest_bg);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5020 if (ret)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5021 goto fail;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5022 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5023
fd6594b1446cc7 Mark Harmstone 2026-01-07 5024 ret = copy_remapped_data(fs_info, start, new_addr, length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5025 if (ret)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5026 goto fail;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5027
fd6594b1446cc7 Mark Harmstone 2026-01-07 5028 ret = btrfs_remove_from_free_space_tree(trans, new_addr, length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5029 if (ret)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5030 goto fail;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5031
fd6594b1446cc7 Mark Harmstone 2026-01-07 5032 ret = add_remap_entry(trans, path, src_bg, start, new_addr, length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5033 if (ret) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 5034 btrfs_add_to_free_space_tree(trans, new_addr, length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5035 goto fail;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5036 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5037
fd6594b1446cc7 Mark Harmstone 2026-01-07 5038 adjust_block_group_remap_bytes(trans, dest_bg, length);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5039 btrfs_free_reserved_bytes(dest_bg, length, 0);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5040
fd6594b1446cc7 Mark Harmstone 2026-01-07 5041 spin_lock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5042 sinfo->bytes_readonly += length;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5043 spin_unlock(&sinfo->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5044
fd6594b1446cc7 Mark Harmstone 2026-01-07 5045 next:
fd6594b1446cc7 Mark Harmstone 2026-01-07 5046 if (dest_bg)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5047 btrfs_put_block_group(dest_bg);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5048
fd6594b1446cc7 Mark Harmstone 2026-01-07 5049 if (made_reservation)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5050 btrfs_dec_block_group_reservations(fs_info, new_addr);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5051
fd6594b1446cc7 Mark Harmstone 2026-01-07 5052 mutex_unlock(&fs_info->remap_mutex);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5053
fd6594b1446cc7 Mark Harmstone 2026-01-07 5054 if (src_bg->identity_remap_count == 0) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 5055 bool mark_fully_remapped = false;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5056
fd6594b1446cc7 Mark Harmstone 2026-01-07 5057 spin_lock(&src_bg->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5058 if (!test_bit(BLOCK_GROUP_FLAG_FULLY_REMAPPED, &src_bg->runtime_flags)) {
fd6594b1446cc7 Mark Harmstone 2026-01-07 5059 mark_fully_remapped = true;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5060 set_bit(BLOCK_GROUP_FLAG_FULLY_REMAPPED, &src_bg->runtime_flags);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5061 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5062 spin_unlock(&src_bg->lock);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5063
fd6594b1446cc7 Mark Harmstone 2026-01-07 5064 if (mark_fully_remapped)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5065 btrfs_mark_bg_fully_remapped(src_bg, trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5066 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5067
fd6594b1446cc7 Mark Harmstone 2026-01-07 5068 ret = btrfs_end_transaction(trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5069 if (ret)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5070 return ret;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5071
fd6594b1446cc7 Mark Harmstone 2026-01-07 5072 if (no_more)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5073 return 1;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5074
fd6594b1446cc7 Mark Harmstone 2026-01-07 5075 *last_start = start;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5076
fd6594b1446cc7 Mark Harmstone 2026-01-07 5077 return 0;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5078
fd6594b1446cc7 Mark Harmstone 2026-01-07 5079 fail:
fd6594b1446cc7 Mark Harmstone 2026-01-07 @5080 if (dest_bg)
fd6594b1446cc7 Mark Harmstone 2026-01-07 5081 btrfs_put_block_group(dest_bg);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5082
fd6594b1446cc7 Mark Harmstone 2026-01-07 5083 btrfs_free_reserved_extent(fs_info, new_addr, length, 0);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5084
fd6594b1446cc7 Mark Harmstone 2026-01-07 5085 mutex_unlock(&fs_info->remap_mutex);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5086 btrfs_end_transaction(trans);
fd6594b1446cc7 Mark Harmstone 2026-01-07 5087
fd6594b1446cc7 Mark Harmstone 2026-01-07 5088 return ret;
fd6594b1446cc7 Mark Harmstone 2026-01-07 5089 }
fd6594b1446cc7 Mark Harmstone 2026-01-07 5090
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-09-14 10:40 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202609141239.E9aQTPvb-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@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.