2018-09-10 15:03:04

by kernel test robot

[permalink] [raw]
Subject: [linux-next:master 3022/3360] fs/btrfs/extent-tree.c:2540:5: sparse: symbol 'btrfs_run_delayed_refs_for_head' was not declared. Should it be static?

tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 43783a8f68478e81fe183f86162d3e7ca29ba923
commit: ac75a14eb672441d674d46b64a03f59d0f186cae [3022/3360] btrfs: Factor out loop processing all refs of a head
reproduce:
# apt-get install sparse
git checkout ac75a14eb672441d674d46b64a03f59d0f186cae
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

fs/btrfs/extent-tree.c:273:39: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:273:39: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:397:16: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:2506:31: sparse: symbol 'btrfs_obtain_ref_head' was not declared. Should it be static?
>> fs/btrfs/extent-tree.c:2540:5: sparse: symbol 'btrfs_run_delayed_refs_for_head' was not declared. Should it be static?
fs/btrfs/extent-tree.c:4439:26: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4789:31: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4789:31: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4984:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4984:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4984:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:4984:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5001:22: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5553:48: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5553:48: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5795:21: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5800:27: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5806:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:5806:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6196:29: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6196:29: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6617:23: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6617:23: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6620:31: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6620:31: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6663:42: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:6663:42: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7382:24: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7382:24: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7383:24: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7383:24: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7547:43: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7547:43: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7892:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7892:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7895:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:7895:37: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:8446:35: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:8449:35: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:8449:35: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:10961:25: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:10961:25: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:10962:23: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:10962:23: sparse: expression using sizeof(void)
fs/btrfs/extent-tree.c:2419:20: sparse: context imbalance in 'cleanup_extent_op' - unexpected unlock
fs/btrfs/extent-tree.c:2452:28: sparse: context imbalance in 'cleanup_ref_head' - unexpected unlock
>> fs/btrfs/extent-tree.c:2557:36: sparse: context imbalance in 'btrfs_run_delayed_refs_for_head' - unexpected unlock
fs/btrfs/extent-tree.c:2664:26: sparse: context imbalance in '__btrfs_run_delayed_refs' - different lock contexts for basic block
fs/btrfs/extent-tree.c:7249:39: sparse: context imbalance in 'btrfs_lock_cluster' - wrong count at exit
fs/btrfs/extent-tree.c:7526:44: sparse: context imbalance in 'find_free_extent' - unexpected unlock
fs/btrfs/extent-tree.c:9712:9: sparse: context imbalance in 'btrfs_put_block_group_cache' - wrong count at exit

Please review and possibly fold the followup patch.

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


2018-09-10 15:02:55

by Fengguang Wu

[permalink] [raw]
Subject: [RFC PATCH linux-next] btrfs: btrfs_run_delayed_refs_for_head() can be static


Fixes: ac75a14eb672 ("btrfs: Factor out loop processing all refs of a head")
Signed-off-by: kbuild test robot <[email protected]>
---
extent-tree.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index b0882b6..719f1bb 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2537,9 +2537,9 @@ struct btrfs_delayed_ref_head *btrfs_obtain_ref_head(
}

STATIC
-int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
- struct btrfs_delayed_ref_head *locked_ref,
- unsigned long *run_refs)
+static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
+ struct btrfs_delayed_ref_head *locked_ref,
+ unsigned long *run_refs)
{
struct btrfs_fs_info *fs_info = trans->fs_info;
struct btrfs_delayed_ref_root *delayed_refs;

2018-09-10 16:50:29

by David Sterba

[permalink] [raw]
Subject: Re: [RFC PATCH linux-next] btrfs: btrfs_run_delayed_refs_for_head() can be static

On Mon, Sep 10, 2018 at 11:00:29PM +0800, kbuild test robot wrote:
>
> Fixes: ac75a14eb672 ("btrfs: Factor out loop processing all refs of a head")
> Signed-off-by: kbuild test robot <[email protected]>
> ---
> extent-tree.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index b0882b6..719f1bb 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -2537,9 +2537,9 @@ struct btrfs_delayed_ref_head *btrfs_obtain_ref_head(
> }
>
> STATIC
> -int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
> - struct btrfs_delayed_ref_head *locked_ref,
> - unsigned long *run_refs)
> +static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
> + struct btrfs_delayed_ref_head *locked_ref,
> + unsigned long *run_refs)

I have a cleanup series to get rid of the STATIC macro, will result in
normal 'static' of the function. The patch will need to be updated, you
can ignore the warning for now.

> {
> struct btrfs_fs_info *fs_info = trans->fs_info;
> struct btrfs_delayed_ref_root *delayed_refs;