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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to