On Thu, Mar 11, 2021 at 5:27 PM kernel test robot <l...@intel.com> wrote: > > Hi, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on v5.12-rc2] > [also build test WARNING on next-20210311] > [cannot apply to kdave/for-next] > [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-bug-fixes-for-the-tree-mod-log-and-small-refactorings/20210311-223429 > base: a38fd8748464831584a19438cbb3082b5a2dab15 > config: x86_64-randconfig-m001-20210311 (attached as .config) > compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <l...@intel.com> > > smatch warnings: > fs/btrfs/tree-mod-log.c:286 btrfs_tree_mod_log_insert_move() warn: missing > error code 'ret' > fs/btrfs/tree-mod-log.c:519 btrfs_tree_mod_log_eb_copy() warn: missing error > code 'ret' > fs/btrfs/tree-mod-log.c:577 btrfs_tree_mod_log_free_eb() warn: missing error > code 'ret'
No, those are all ok. For all cases, 'ret' was initialized to 0 when declared, and that's what we want to return when tree_mod_dont_log() returns true. > > vim +/ret +286 fs/btrfs/tree-mod-log.c > > 246 > 247 int btrfs_tree_mod_log_insert_move(struct extent_buffer *eb, > 248 int dst_slot, int src_slot, > 249 int nr_items) > 250 { > 251 struct tree_mod_elem *tm = NULL; > 252 struct tree_mod_elem **tm_list = NULL; > 253 int ret = 0; > 254 int i; > 255 int locked = 0; > 256 > 257 if (!tree_mod_need_log(eb->fs_info, eb)) > 258 return 0; > 259 > 260 tm_list = kcalloc(nr_items, sizeof(struct tree_mod_elem *), > GFP_NOFS); > 261 if (!tm_list) > 262 return -ENOMEM; > 263 > 264 tm = kzalloc(sizeof(*tm), GFP_NOFS); > 265 if (!tm) { > 266 ret = -ENOMEM; > 267 goto free_tms; > 268 } > 269 > 270 tm->logical = eb->start; > 271 tm->slot = src_slot; > 272 tm->move.dst_slot = dst_slot; > 273 tm->move.nr_items = nr_items; > 274 tm->op = BTRFS_MOD_LOG_MOVE_KEYS; > 275 > 276 for (i = 0; i + dst_slot < src_slot && i < nr_items; i++) { > 277 tm_list[i] = alloc_tree_mod_elem(eb, i + dst_slot, > 278 BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING, GFP_NOFS); > 279 if (!tm_list[i]) { > 280 ret = -ENOMEM; > 281 goto free_tms; > 282 } > 283 } > 284 > 285 if (tree_mod_dont_log(eb->fs_info, eb)) > > 286 goto free_tms; > 287 locked = 1; > 288 > 289 /* > 290 * When we override something during the move, we log these > removals. > 291 * This can only happen when we move towards the beginning of > the > 292 * buffer, i.e. dst_slot < src_slot. > 293 */ > 294 for (i = 0; i + dst_slot < src_slot && i < nr_items; i++) { > 295 ret = tree_mod_log_insert(eb->fs_info, tm_list[i]); > 296 if (ret) > 297 goto free_tms; > 298 } > 299 > 300 ret = tree_mod_log_insert(eb->fs_info, tm); > 301 if (ret) > 302 goto free_tms; > 303 write_unlock(&eb->fs_info->tree_mod_log_lock); > 304 kfree(tm_list); > 305 > 306 return 0; > 307 free_tms: > 308 for (i = 0; i < nr_items; i++) { > 309 if (tm_list[i] && !RB_EMPTY_NODE(&tm_list[i]->node)) > 310 rb_erase(&tm_list[i]->node, > &eb->fs_info->tree_mod_log); > 311 kfree(tm_list[i]); > 312 } > 313 if (locked) > 314 write_unlock(&eb->fs_info->tree_mod_log_lock); > 315 kfree(tm_list); > 316 kfree(tm); > 317 > 318 return ret; > 319 } > 320 > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org