fs/btrfs/ctree.c:5149: warning: 'found_key' is used uninitialized in this function

From: kbuild test robot
Date: Mon Jul 17 2017 - 20:55:53 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: cb8c65ccff7f77d0285f1b126c72d37b2572c865
commit: 6974f0c4555e285ab217cee58b6e874f776ff409 include/linux/string.h: add the option of fortified string.h functions
date: 5 days ago
config: x86_64-randconfig-v0-07180702 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
git checkout 6974f0c4555e285ab217cee58b6e874f776ff409
# save the attached .config to linux build tree
make ARCH=x86_64

All warnings (new ones prefixed by >>):

fs/btrfs/ctree.c: In function 'btrfs_search_forward':
>> fs/btrfs/ctree.c:5149: warning: 'found_key' is used uninitialized in this function

vim +/found_key +5149 fs/btrfs/ctree.c

7bb86316 Chris Mason 2007-12-11 5120
3f157a2f Chris Mason 2008-06-25 5121 /*
3f157a2f Chris Mason 2008-06-25 5122 * A helper function to walk down the tree starting at min_key, and looking
de78b51a Eric Sandeen 2013-01-31 5123 * for nodes or leaves that are have a minimum transaction id.
de78b51a Eric Sandeen 2013-01-31 5124 * This is used by the btree defrag code, and tree logging
3f157a2f Chris Mason 2008-06-25 5125 *
3f157a2f Chris Mason 2008-06-25 5126 * This does not cow, but it does stuff the starting key it finds back
3f157a2f Chris Mason 2008-06-25 5127 * into min_key, so you can call btrfs_search_slot with cow=1 on the
3f157a2f Chris Mason 2008-06-25 5128 * key and get a writable path.
3f157a2f Chris Mason 2008-06-25 5129 *
3f157a2f Chris Mason 2008-06-25 5130 * This does lock as it descends, and path->keep_locks should be set
3f157a2f Chris Mason 2008-06-25 5131 * to 1 by the caller.
3f157a2f Chris Mason 2008-06-25 5132 *
3f157a2f Chris Mason 2008-06-25 5133 * This honors path->lowest_level to prevent descent past a given level
3f157a2f Chris Mason 2008-06-25 5134 * of the tree.
3f157a2f Chris Mason 2008-06-25 5135 *
d352ac68 Chris Mason 2008-09-29 5136 * min_trans indicates the oldest transaction that you are interested
d352ac68 Chris Mason 2008-09-29 5137 * in walking through. Any nodes or leaves older than min_trans are
d352ac68 Chris Mason 2008-09-29 5138 * skipped over (without reading them).
d352ac68 Chris Mason 2008-09-29 5139 *
3f157a2f Chris Mason 2008-06-25 5140 * returns zero if something useful was found, < 0 on error and 1 if there
3f157a2f Chris Mason 2008-06-25 5141 * was nothing in the tree that matched the search criteria.
3f157a2f Chris Mason 2008-06-25 5142 */
3f157a2f Chris Mason 2008-06-25 5143 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
de78b51a Eric Sandeen 2013-01-31 5144 struct btrfs_path *path,
3f157a2f Chris Mason 2008-06-25 5145 u64 min_trans)
3f157a2f Chris Mason 2008-06-25 5146 {
2ff7e61e Jeff Mahoney 2016-06-22 5147 struct btrfs_fs_info *fs_info = root->fs_info;
3f157a2f Chris Mason 2008-06-25 5148 struct extent_buffer *cur;
3f157a2f Chris Mason 2008-06-25 @5149 struct btrfs_key found_key;
3f157a2f Chris Mason 2008-06-25 5150 int slot;
9652480b Yan 2008-07-24 5151 int sret;
3f157a2f Chris Mason 2008-06-25 5152 u32 nritems;
3f157a2f Chris Mason 2008-06-25 5153 int level;
3f157a2f Chris Mason 2008-06-25 5154 int ret = 1;
f98de9b9 Filipe Manana 2014-08-04 5155 int keep_locks = path->keep_locks;
3f157a2f Chris Mason 2008-06-25 5156
f98de9b9 Filipe Manana 2014-08-04 5157 path->keep_locks = 1;
3f157a2f Chris Mason 2008-06-25 5158 again:
bd681513 Chris Mason 2011-07-16 5159 cur = btrfs_read_lock_root_node(root);
3f157a2f Chris Mason 2008-06-25 5160 level = btrfs_header_level(cur);
e02119d5 Chris Mason 2008-09-05 5161 WARN_ON(path->nodes[level]);
3f157a2f Chris Mason 2008-06-25 5162 path->nodes[level] = cur;
bd681513 Chris Mason 2011-07-16 5163 path->locks[level] = BTRFS_READ_LOCK;
3f157a2f Chris Mason 2008-06-25 5164
3f157a2f Chris Mason 2008-06-25 5165 if (btrfs_header_generation(cur) < min_trans) {
3f157a2f Chris Mason 2008-06-25 5166 ret = 1;
3f157a2f Chris Mason 2008-06-25 5167 goto out;
3f157a2f Chris Mason 2008-06-25 5168 }
3f157a2f Chris Mason 2008-06-25 5169 while (1) {
3f157a2f Chris Mason 2008-06-25 5170 nritems = btrfs_header_nritems(cur);
3f157a2f Chris Mason 2008-06-25 5171 level = btrfs_header_level(cur);
9652480b Yan 2008-07-24 5172 sret = bin_search(cur, min_key, level, &slot);
3f157a2f Chris Mason 2008-06-25 5173
323ac95b Chris Mason 2008-10-01 5174 /* at the lowest level, we're done, setup the path and exit */
323ac95b Chris Mason 2008-10-01 5175 if (level == path->lowest_level) {
e02119d5 Chris Mason 2008-09-05 5176 if (slot >= nritems)
e02119d5 Chris Mason 2008-09-05 5177 goto find_next_key;
3f157a2f Chris Mason 2008-06-25 5178 ret = 0;
3f157a2f Chris Mason 2008-06-25 5179 path->slots[level] = slot;
3f157a2f Chris Mason 2008-06-25 5180 btrfs_item_key_to_cpu(cur, &found_key, slot);
3f157a2f Chris Mason 2008-06-25 5181 goto out;
3f157a2f Chris Mason 2008-06-25 5182 }
9652480b Yan 2008-07-24 5183 if (sret && slot > 0)
9652480b Yan 2008-07-24 5184 slot--;
3f157a2f Chris Mason 2008-06-25 5185 /*
de78b51a Eric Sandeen 2013-01-31 5186 * check this node pointer against the min_trans parameters.
de78b51a Eric Sandeen 2013-01-31 5187 * If it is too old, old, skip to the next one.
3f157a2f Chris Mason 2008-06-25 5188 */
3f157a2f Chris Mason 2008-06-25 5189 while (slot < nritems) {
3f157a2f Chris Mason 2008-06-25 5190 u64 gen;
e02119d5 Chris Mason 2008-09-05 5191
3f157a2f Chris Mason 2008-06-25 5192 gen = btrfs_node_ptr_generation(cur, slot);
3f157a2f Chris Mason 2008-06-25 5193 if (gen < min_trans) {
3f157a2f Chris Mason 2008-06-25 5194 slot++;
3f157a2f Chris Mason 2008-06-25 5195 continue;
3f157a2f Chris Mason 2008-06-25 5196 }
3f157a2f Chris Mason 2008-06-25 5197 break;
3f157a2f Chris Mason 2008-06-25 5198 }
e02119d5 Chris Mason 2008-09-05 5199 find_next_key:
3f157a2f Chris Mason 2008-06-25 5200 /*
3f157a2f Chris Mason 2008-06-25 5201 * we didn't find a candidate key in this node, walk forward
3f157a2f Chris Mason 2008-06-25 5202 * and find another one
3f157a2f Chris Mason 2008-06-25 5203 */
3f157a2f Chris Mason 2008-06-25 5204 if (slot >= nritems) {
e02119d5 Chris Mason 2008-09-05 5205 path->slots[level] = slot;
b4ce94de Chris Mason 2009-02-04 5206 btrfs_set_path_blocking(path);
e02119d5 Chris Mason 2008-09-05 5207 sret = btrfs_find_next_key(root, path, min_key, level,
de78b51a Eric Sandeen 2013-01-31 5208 min_trans);
e02119d5 Chris Mason 2008-09-05 5209 if (sret == 0) {
b3b4aa74 David Sterba 2011-04-21 5210 btrfs_release_path(path);
3f157a2f Chris Mason 2008-06-25 5211 goto again;
3f157a2f Chris Mason 2008-06-25 5212 } else {
3f157a2f Chris Mason 2008-06-25 5213 goto out;
3f157a2f Chris Mason 2008-06-25 5214 }
3f157a2f Chris Mason 2008-06-25 5215 }
3f157a2f Chris Mason 2008-06-25 5216 /* save our key for returning back */
3f157a2f Chris Mason 2008-06-25 5217 btrfs_node_key_to_cpu(cur, &found_key, slot);
3f157a2f Chris Mason 2008-06-25 5218 path->slots[level] = slot;
3f157a2f Chris Mason 2008-06-25 5219 if (level == path->lowest_level) {
3f157a2f Chris Mason 2008-06-25 5220 ret = 0;
3f157a2f Chris Mason 2008-06-25 5221 goto out;
3f157a2f Chris Mason 2008-06-25 5222 }
b4ce94de Chris Mason 2009-02-04 5223 btrfs_set_path_blocking(path);
2ff7e61e Jeff Mahoney 2016-06-22 5224 cur = read_node_slot(fs_info, cur, slot);
fb770ae4 Liu Bo 2016-07-05 5225 if (IS_ERR(cur)) {
fb770ae4 Liu Bo 2016-07-05 5226 ret = PTR_ERR(cur);
fb770ae4 Liu Bo 2016-07-05 5227 goto out;
fb770ae4 Liu Bo 2016-07-05 5228 }
3f157a2f Chris Mason 2008-06-25 5229
bd681513 Chris Mason 2011-07-16 5230 btrfs_tree_read_lock(cur);
b4ce94de Chris Mason 2009-02-04 5231
bd681513 Chris Mason 2011-07-16 5232 path->locks[level - 1] = BTRFS_READ_LOCK;
3f157a2f Chris Mason 2008-06-25 5233 path->nodes[level - 1] = cur;
f7c79f30 Chris Mason 2012-03-19 5234 unlock_up(path, level, 1, 0, NULL);
bd681513 Chris Mason 2011-07-16 5235 btrfs_clear_path_blocking(path, NULL, 0);
3f157a2f Chris Mason 2008-06-25 5236 }
3f157a2f Chris Mason 2008-06-25 5237 out:
f98de9b9 Filipe Manana 2014-08-04 5238 path->keep_locks = keep_locks;
f98de9b9 Filipe Manana 2014-08-04 5239 if (ret == 0) {
f98de9b9 Filipe Manana 2014-08-04 5240 btrfs_unlock_up_safe(path, path->lowest_level + 1);
b4ce94de Chris Mason 2009-02-04 5241 btrfs_set_path_blocking(path);
f98de9b9 Filipe Manana 2014-08-04 5242 memcpy(min_key, &found_key, sizeof(found_key));
f98de9b9 Filipe Manana 2014-08-04 5243 }
3f157a2f Chris Mason 2008-06-25 5244 return ret;
3f157a2f Chris Mason 2008-06-25 5245 }
3f157a2f Chris Mason 2008-06-25 5246

:::::: The code at line 5149 was first introduced by commit
:::::: 3f157a2fd2ad731e1ed9964fecdc5f459f04a4a4 Btrfs: Online btree defragmentation fixes

:::::: TO: Chris Mason <chris.mason@xxxxxxxxxx>
:::::: CC: Chris Mason <chris.mason@xxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip