CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Qu Wenruo <[email protected]> TO: [email protected]
Hi Qu, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on kdave/for-next] [also build test WARNING on v5.9-rc2 next-20200826] [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/Qu-Wenruo/btrfs-Only-require-sector-size-alignment-for-parent-eb-bytenr/20200826-172817 base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next :::::: branch date: 9 hours ago :::::: commit date: 9 hours ago config: x86_64-randconfig-m001-20200826 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: fs/btrfs/extent-tree.c:432 btrfs_get_extent_inline_ref_type() warn: '0x' prefix is confusing together with '%lu' specifier fs/btrfs/extent-tree.c:432 btrfs_get_extent_inline_ref_type() warn: argument 4 to %lu specifier is cast from pointer # https://github.com/0day-ci/linux/commit/45e82350ded690823247b2902c1cca52b4a4ead8 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Qu-Wenruo/btrfs-Only-require-sector-size-alignment-for-parent-eb-bytenr/20200826-172817 git checkout 45e82350ded690823247b2902c1cca52b4a4ead8 vim +432 fs/btrfs/extent-tree.c a22285a6a32390 Yan, Zheng 2010-05-16 274 d8d5f3e16d1ae4 Chris Mason 2007-12-11 275 /* d8d5f3e16d1ae4 Chris Mason 2007-12-11 276 * Back reference rules. Back refs have three main goals: d8d5f3e16d1ae4 Chris Mason 2007-12-11 277 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 278 * 1) differentiate between all holders of references to an extent so that d8d5f3e16d1ae4 Chris Mason 2007-12-11 279 * when a reference is dropped we can make sure it was a valid reference d8d5f3e16d1ae4 Chris Mason 2007-12-11 280 * before freeing the extent. d8d5f3e16d1ae4 Chris Mason 2007-12-11 281 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 282 * 2) Provide enough information to quickly find the holders of an extent d8d5f3e16d1ae4 Chris Mason 2007-12-11 283 * if we notice a given block is corrupted or bad. d8d5f3e16d1ae4 Chris Mason 2007-12-11 284 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 285 * 3) Make it easy to migrate blocks for FS shrinking or storage pool d8d5f3e16d1ae4 Chris Mason 2007-12-11 286 * maintenance. This is actually the same as #2, but with a slightly d8d5f3e16d1ae4 Chris Mason 2007-12-11 287 * different use case. d8d5f3e16d1ae4 Chris Mason 2007-12-11 288 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 289 * There are two kinds of back refs. The implicit back refs is optimized 5d4f98a28c7d33 Yan Zheng 2009-06-10 290 * for pointers in non-shared tree blocks. For a given pointer in a block, 5d4f98a28c7d33 Yan Zheng 2009-06-10 291 * back refs of this kind provide information about the block's owner tree 5d4f98a28c7d33 Yan Zheng 2009-06-10 292 * and the pointer's key. These information allow us to find the block by 5d4f98a28c7d33 Yan Zheng 2009-06-10 293 * b-tree searching. The full back refs is for pointers in tree blocks not 5d4f98a28c7d33 Yan Zheng 2009-06-10 294 * referenced by their owner trees. The location of tree block is recorded 5d4f98a28c7d33 Yan Zheng 2009-06-10 295 * in the back refs. Actually the full back refs is generic, and can be 5d4f98a28c7d33 Yan Zheng 2009-06-10 296 * used in all cases the implicit back refs is used. The major shortcoming 5d4f98a28c7d33 Yan Zheng 2009-06-10 297 * of the full back refs is its overhead. Every time a tree block gets 5d4f98a28c7d33 Yan Zheng 2009-06-10 298 * COWed, we have to update back refs entry for all pointers in it. 5d4f98a28c7d33 Yan Zheng 2009-06-10 299 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 300 * For a newly allocated tree block, we use implicit back refs for 5d4f98a28c7d33 Yan Zheng 2009-06-10 301 * pointers in it. This means most tree related operations only involve 5d4f98a28c7d33 Yan Zheng 2009-06-10 302 * implicit back refs. For a tree block created in old transaction, the 5d4f98a28c7d33 Yan Zheng 2009-06-10 303 * only way to drop a reference to it is COW it. So we can detect the 5d4f98a28c7d33 Yan Zheng 2009-06-10 304 * event that tree block loses its owner tree's reference and do the 5d4f98a28c7d33 Yan Zheng 2009-06-10 305 * back refs conversion. 5d4f98a28c7d33 Yan Zheng 2009-06-10 306 * 0132761017e012 Nicholas D Steeves 2016-05-19 307 * When a tree block is COWed through a tree, there are four cases: 5d4f98a28c7d33 Yan Zheng 2009-06-10 308 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 309 * The reference count of the block is one and the tree is the block's 5d4f98a28c7d33 Yan Zheng 2009-06-10 310 * owner tree. Nothing to do in this case. 5d4f98a28c7d33 Yan Zheng 2009-06-10 311 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 312 * The reference count of the block is one and the tree is not the 5d4f98a28c7d33 Yan Zheng 2009-06-10 313 * block's owner tree. In this case, full back refs is used for pointers 5d4f98a28c7d33 Yan Zheng 2009-06-10 314 * in the block. Remove these full back refs, add implicit back refs for 5d4f98a28c7d33 Yan Zheng 2009-06-10 315 * every pointers in the new block. 5d4f98a28c7d33 Yan Zheng 2009-06-10 316 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 317 * The reference count of the block is greater than one and the tree is 5d4f98a28c7d33 Yan Zheng 2009-06-10 318 * the block's owner tree. In this case, implicit back refs is used for 5d4f98a28c7d33 Yan Zheng 2009-06-10 319 * pointers in the block. Add full back refs for every pointers in the 5d4f98a28c7d33 Yan Zheng 2009-06-10 320 * block, increase lower level extents' reference counts. The original 5d4f98a28c7d33 Yan Zheng 2009-06-10 321 * implicit back refs are entailed to the new block. 5d4f98a28c7d33 Yan Zheng 2009-06-10 322 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 323 * The reference count of the block is greater than one and the tree is 5d4f98a28c7d33 Yan Zheng 2009-06-10 324 * not the block's owner tree. Add implicit back refs for every pointer in 5d4f98a28c7d33 Yan Zheng 2009-06-10 325 * the new block, increase lower level extents' reference count. 5d4f98a28c7d33 Yan Zheng 2009-06-10 326 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 327 * Back Reference Key composing: 5d4f98a28c7d33 Yan Zheng 2009-06-10 328 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 329 * The key objectid corresponds to the first byte in the extent, 5d4f98a28c7d33 Yan Zheng 2009-06-10 330 * The key type is used to differentiate between types of back refs. 5d4f98a28c7d33 Yan Zheng 2009-06-10 331 * There are different meanings of the key offset for different types 5d4f98a28c7d33 Yan Zheng 2009-06-10 332 * of back refs. 5d4f98a28c7d33 Yan Zheng 2009-06-10 333 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 334 * File extents can be referenced by: d8d5f3e16d1ae4 Chris Mason 2007-12-11 335 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 336 * - multiple snapshots, subvolumes, or different generations in one subvol 31840ae1a6b433 Zheng Yan 2008-09-23 337 * - different files inside a single subvolume d8d5f3e16d1ae4 Chris Mason 2007-12-11 338 * - different offsets inside a file (bookend extents in file.c) d8d5f3e16d1ae4 Chris Mason 2007-12-11 339 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 340 * The extent ref structure for the implicit back refs has fields for: d8d5f3e16d1ae4 Chris Mason 2007-12-11 341 * d8d5f3e16d1ae4 Chris Mason 2007-12-11 342 * - Objectid of the subvolume root d8d5f3e16d1ae4 Chris Mason 2007-12-11 343 * - objectid of the file holding the reference 5d4f98a28c7d33 Yan Zheng 2009-06-10 344 * - original offset in the file 5d4f98a28c7d33 Yan Zheng 2009-06-10 345 * - how many bookend extents d8d5f3e16d1ae4 Chris Mason 2007-12-11 346 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 347 * The key offset for the implicit back refs is hash of the first 5d4f98a28c7d33 Yan Zheng 2009-06-10 348 * three fields. d8d5f3e16d1ae4 Chris Mason 2007-12-11 349 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 350 * The extent ref structure for the full back refs has field for: d8d5f3e16d1ae4 Chris Mason 2007-12-11 351 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 352 * - number of pointers in the tree leaf d8d5f3e16d1ae4 Chris Mason 2007-12-11 353 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 354 * The key offset for the implicit back refs is the first byte of 5d4f98a28c7d33 Yan Zheng 2009-06-10 355 * the tree leaf d8d5f3e16d1ae4 Chris Mason 2007-12-11 356 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 357 * When a file extent is allocated, The implicit back refs is used. 5d4f98a28c7d33 Yan Zheng 2009-06-10 358 * the fields are filled in: d8d5f3e16d1ae4 Chris Mason 2007-12-11 359 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 360 * (root_key.objectid, inode objectid, offset in file, 1) d8d5f3e16d1ae4 Chris Mason 2007-12-11 361 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 362 * When a file extent is removed file truncation, we find the 5d4f98a28c7d33 Yan Zheng 2009-06-10 363 * corresponding implicit back refs and check the following fields: d8d5f3e16d1ae4 Chris Mason 2007-12-11 364 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 365 * (btrfs_header_owner(leaf), inode objectid, offset in file) d8d5f3e16d1ae4 Chris Mason 2007-12-11 366 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 367 * Btree extents can be referenced by: d8d5f3e16d1ae4 Chris Mason 2007-12-11 368 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 369 * - Different subvolumes d8d5f3e16d1ae4 Chris Mason 2007-12-11 370 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 371 * Both the implicit back refs and the full back refs for tree blocks 5d4f98a28c7d33 Yan Zheng 2009-06-10 372 * only consist of key. The key offset for the implicit back refs is 5d4f98a28c7d33 Yan Zheng 2009-06-10 373 * objectid of block's owner tree. The key offset for the full back refs 5d4f98a28c7d33 Yan Zheng 2009-06-10 374 * is the first byte of parent block. d8d5f3e16d1ae4 Chris Mason 2007-12-11 375 * 5d4f98a28c7d33 Yan Zheng 2009-06-10 376 * When implicit back refs is used, information about the lowest key and 5d4f98a28c7d33 Yan Zheng 2009-06-10 377 * level of the tree block are required. These information are stored in 5d4f98a28c7d33 Yan Zheng 2009-06-10 378 * tree block info structure. d8d5f3e16d1ae4 Chris Mason 2007-12-11 379 */ 31840ae1a6b433 Zheng Yan 2008-09-23 380 167ce953ca55bd Liu Bo 2017-08-18 381 /* 167ce953ca55bd Liu Bo 2017-08-18 382 * is_data == BTRFS_REF_TYPE_BLOCK, tree block type is required, 52042d8e82ff50 Andrea Gelmini 2018-11-28 383 * is_data == BTRFS_REF_TYPE_DATA, data type is requiried, 167ce953ca55bd Liu Bo 2017-08-18 384 * is_data == BTRFS_REF_TYPE_ANY, either type is OK. 167ce953ca55bd Liu Bo 2017-08-18 385 */ 167ce953ca55bd Liu Bo 2017-08-18 386 int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb, 167ce953ca55bd Liu Bo 2017-08-18 387 struct btrfs_extent_inline_ref *iref, 167ce953ca55bd Liu Bo 2017-08-18 388 enum btrfs_inline_ref_type is_data) 167ce953ca55bd Liu Bo 2017-08-18 389 { 167ce953ca55bd Liu Bo 2017-08-18 390 int type = btrfs_extent_inline_ref_type(eb, iref); 64ecdb647ddb83 Liu Bo 2017-08-18 391 u64 offset = btrfs_extent_inline_ref_offset(eb, iref); 167ce953ca55bd Liu Bo 2017-08-18 392 167ce953ca55bd Liu Bo 2017-08-18 393 if (type == BTRFS_TREE_BLOCK_REF_KEY || 167ce953ca55bd Liu Bo 2017-08-18 394 type == BTRFS_SHARED_BLOCK_REF_KEY || 167ce953ca55bd Liu Bo 2017-08-18 395 type == BTRFS_SHARED_DATA_REF_KEY || 167ce953ca55bd Liu Bo 2017-08-18 396 type == BTRFS_EXTENT_DATA_REF_KEY) { 167ce953ca55bd Liu Bo 2017-08-18 397 if (is_data == BTRFS_REF_TYPE_BLOCK) { 64ecdb647ddb83 Liu Bo 2017-08-18 398 if (type == BTRFS_TREE_BLOCK_REF_KEY) 167ce953ca55bd Liu Bo 2017-08-18 399 return type; 64ecdb647ddb83 Liu Bo 2017-08-18 400 if (type == BTRFS_SHARED_BLOCK_REF_KEY) { 64ecdb647ddb83 Liu Bo 2017-08-18 401 ASSERT(eb->fs_info); 64ecdb647ddb83 Liu Bo 2017-08-18 402 /* 64ecdb647ddb83 Liu Bo 2017-08-18 403 * Every shared one has parent tree 64ecdb647ddb83 Liu Bo 2017-08-18 404 * block, which must be aligned to 45e82350ded690 Qu Wenruo 2020-08-26 405 * sector size. 64ecdb647ddb83 Liu Bo 2017-08-18 406 */ 64ecdb647ddb83 Liu Bo 2017-08-18 407 if (offset && 45e82350ded690 Qu Wenruo 2020-08-26 408 IS_ALIGNED(offset, eb->fs_info->sectorsize)) 64ecdb647ddb83 Liu Bo 2017-08-18 409 return type; 64ecdb647ddb83 Liu Bo 2017-08-18 410 } 167ce953ca55bd Liu Bo 2017-08-18 411 } else if (is_data == BTRFS_REF_TYPE_DATA) { 64ecdb647ddb83 Liu Bo 2017-08-18 412 if (type == BTRFS_EXTENT_DATA_REF_KEY) 167ce953ca55bd Liu Bo 2017-08-18 413 return type; 64ecdb647ddb83 Liu Bo 2017-08-18 414 if (type == BTRFS_SHARED_DATA_REF_KEY) { 64ecdb647ddb83 Liu Bo 2017-08-18 415 ASSERT(eb->fs_info); 64ecdb647ddb83 Liu Bo 2017-08-18 416 /* 64ecdb647ddb83 Liu Bo 2017-08-18 417 * Every shared one has parent tree 64ecdb647ddb83 Liu Bo 2017-08-18 418 * block, which must be aligned to 45e82350ded690 Qu Wenruo 2020-08-26 419 * sector size. 64ecdb647ddb83 Liu Bo 2017-08-18 420 */ 64ecdb647ddb83 Liu Bo 2017-08-18 421 if (offset && 45e82350ded690 Qu Wenruo 2020-08-26 422 IS_ALIGNED(offset, eb->fs_info->sectorsize)) 64ecdb647ddb83 Liu Bo 2017-08-18 423 return type; 64ecdb647ddb83 Liu Bo 2017-08-18 424 } 167ce953ca55bd Liu Bo 2017-08-18 425 } else { 167ce953ca55bd Liu Bo 2017-08-18 426 ASSERT(is_data == BTRFS_REF_TYPE_ANY); 167ce953ca55bd Liu Bo 2017-08-18 427 return type; 167ce953ca55bd Liu Bo 2017-08-18 428 } 167ce953ca55bd Liu Bo 2017-08-18 429 } 167ce953ca55bd Liu Bo 2017-08-18 430 167ce953ca55bd Liu Bo 2017-08-18 431 btrfs_print_leaf((struct extent_buffer *)eb); 45e82350ded690 Qu Wenruo 2020-08-26 @432 btrfs_err(eb->fs_info, 45e82350ded690 Qu Wenruo 2020-08-26 433 "eb %llu iref 0x%lu invalid extent inline ref type %d", 45e82350ded690 Qu Wenruo 2020-08-26 434 eb->start, (unsigned long)iref, type); 167ce953ca55bd Liu Bo 2017-08-18 435 WARN_ON(1); 167ce953ca55bd Liu Bo 2017-08-18 436 167ce953ca55bd Liu Bo 2017-08-18 437 return BTRFS_REF_TYPE_INVALID; 167ce953ca55bd Liu Bo 2017-08-18 438 } 167ce953ca55bd Liu Bo 2017-08-18 439 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
