diff mbox series

[net] net: add inline annotation to fix the build warning

Message ID 20241001193352.151102-1-yyyynoom@gmail.com (mailing list archive)
State Rejected
Delegated to: Netdev Maintainers
Headers show
Series [net] net: add inline annotation to fix the build warning | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present fail Series targets non-next tree, but doesn't contain any Fixes tags
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 9 this patch: 9
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 4 of 4 maintainers
netdev/build_clang success Errors and warnings before: 9 this patch: 9
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn fail Errors and warnings before: 12 this patch: 12
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 28 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Moon Yeounsu Oct. 1, 2024, 7:33 p.m. UTC
This patch fixes two `sparse` warnings:
net/core/neighbour.c:453:9: warning: context imbalance in '__neigh_ifdown' - wrong count at exit
net/core/neighbour.c:871:9: warning: context imbalance in 'pneigh_ifdown_and_unlock' - unexpected unlock

You can check it by running:
`make C=1 net/core/neighbour.o`

Signed-off-by: Moon Yeounsu <yyyynoom@gmail.com>
---
 net/core/neighbour.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Eric Dumazet Oct. 2, 2024, 2:41 p.m. UTC | #1
On Wed, Oct 2, 2024 at 3:47 PM Moon Yeounsu <yyyynoom@gmail.com> wrote:
>
> Moon is stupid. He doesn't understand what's going on. It makes me upset.
>
> https://lore.kernel.org/netdev/20240919145609.GF1571683@kernel.org/
>
> Simon did the best effort for him, but he didn't remember that.
>
> Please don't reply to this careless patch.
>
> Replies to me to remember all the maintainer's dedication and thoughtfulness and to take this to heart.
>
> Before I send the patch, I'll check it again and again. And fix the subject `net` to `net-next`.
>
> I'm very very disappointed to myself :(

LOCKDEP is more powerful than sparse, I would not bother with this at all.
Moon Yeounsu Oct. 3, 2024, 1:56 p.m. UTC | #2
On Wed, Oct 2, 2024 at 11:41 PM Eric Dumazet <edumazet@google.com> wrote:
>
> On Wed, Oct 2, 2024 at 3:47 PM Moon Yeounsu <yyyynoom@gmail.com> wrote:
> >
> > Moon is stupid. He doesn't understand what's going on. It makes me upset.
> >
> > https://lore.kernel.org/netdev/20240919145609.GF1571683@kernel.org/
> >
> > Simon did the best effort for him, but he didn't remember that.
> >
> > Please don't reply to this careless patch.
> >
> > Replies to me to remember all the maintainer's dedication and thoughtfulness and to take this to heart.
> >
> > Before I send the patch, I'll check it again and again. And fix the subject `net` to `net-next`.
> >
> > I'm very very disappointed to myself :(
>
> LOCKDEP is more powerful than sparse, I would not bother with this at all.

Totally agree with that. `Sparse` has a lot of problems derived from its nature.
And It is too annoying to silence the warning message. I know that
this patch just fixes for a fix. (What a trivial?)
But, even though `LOCKDEP` is more powerful than `Sparse`, that can't
be the reason to ignore the warning message.

It is only my opinion and this topic may be outside of the net
subsystem. Please don't be offended by my words and ignorance. I don't
want to make a problem, rather want to fix a problem.
If there's no reason to use `Sparse`, then, how about just removing it
from the kernel? If It can't, we have to make Sparse more useful at
least make to have to care about this warning message.

> LOCKDEP is more powerful than sparse, I would not bother with this at all.

Leastways, This sentence is irrational in my view. Let me know, world!
Eric Dumazet Oct. 3, 2024, 2:19 p.m. UTC | #3
On Thu, Oct 3, 2024 at 3:57 PM Moon Yeounsu <yyyynoom@gmail.com> wrote:
>
> On Wed, Oct 2, 2024 at 11:41 PM Eric Dumazet <edumazet@google.com> wrote:
> >
> > On Wed, Oct 2, 2024 at 3:47 PM Moon Yeounsu <yyyynoom@gmail.com> wrote:
> > >
> > > Moon is stupid. He doesn't understand what's going on. It makes me upset.
> > >
> > > https://lore.kernel.org/netdev/20240919145609.GF1571683@kernel.org/
> > >
> > > Simon did the best effort for him, but he didn't remember that.
> > >
> > > Please don't reply to this careless patch.
> > >
> > > Replies to me to remember all the maintainer's dedication and thoughtfulness and to take this to heart.
> > >
> > > Before I send the patch, I'll check it again and again. And fix the subject `net` to `net-next`.
> > >
> > > I'm very very disappointed to myself :(
> >
> > LOCKDEP is more powerful than sparse, I would not bother with this at all.
>
> Totally agree with that. `Sparse` has a lot of problems derived from its nature.
> And It is too annoying to silence the warning message. I know that
> this patch just fixes for a fix. (What a trivial?)
> But, even though `LOCKDEP` is more powerful than `Sparse`, that can't
> be the reason to ignore the warning message.
>
> It is only my opinion and this topic may be outside of the net
> subsystem. Please don't be offended by my words and ignorance. I don't
> want to make a problem, rather want to fix a problem.
> If there's no reason to use `Sparse`, then, how about just removing it
> from the kernel? If It can't, we have to make Sparse more useful at
> least make to have to care about this warning message.

sparse is not in the kernel. Feel free to remove it from your hosts.

Anyway, the __acquires(XXX) annotations means nothing, XXX is
completely ignored.

$ diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 09e31757e96c7472af2a9dfff7a731d4d076aa11..50fc48c6d0c99d91f5a8eb15c4e3dd0304a83e0b
100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -2888,7 +2888,7 @@ static struct key_vector
*fib_route_get_idx(struct fib_route_iter *iter,
 }

 static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos)
-       __acquires(RCU)
+       __acquires(some_random_stuff)
 {
        struct fib_route_iter *iter = seq->private;
        struct fib_table *tb;


$ make C=1 net/ipv4/fib_trie.o
  CALL    scripts/checksyscalls.sh
  DESCEND objtool
  INSTALL libsubcmd_headers
  DESCEND bpf/resolve_btfids
  INSTALL libsubcmd_headers
  CC      net/ipv4/fib_trie.o
  CHECK   net/ipv4/fib_trie.c

No error at all.

It also does not know about conditional locking, it is quite useless.
Moon Yeounsu Oct. 3, 2024, 3:33 p.m. UTC | #4
> sparse is not in the kernel. Feel free to remove it from your hosts.
Oh... I see. Yes, you are right. Sparse is just a program like other
tools like gcc.

>
> $ diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 09e31757e96c7472af2a9dfff7a731d4d076aa11..50fc48c6d0c99d91f5a8eb15c4e3dd0304a83e0b
> 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -2888,7 +2888,7 @@ static struct key_vector
> *fib_route_get_idx(struct fib_route_iter *iter,
>  }
>
>  static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos)
> -       __acquires(RCU)
> +       __acquires(some_random_stuff)
>  {
>         struct fib_route_iter *iter = seq->private;
>         struct fib_table *tb;
>
>
> $ make C=1 net/ipv4/fib_trie.o
>   CALL    scripts/checksyscalls.sh
>   DESCEND objtool
>   INSTALL libsubcmd_headers
>   DESCEND bpf/resolve_btfids
>   INSTALL libsubcmd_headers
>   CC      net/ipv4/fib_trie.o
>   CHECK   net/ipv4/fib_trie.c
>
> No error at all.
> It also does not know about conditional locking, it is quite useless.
Yes, exactly. And It makes me crazy.
`net/ipv6/icmp.c` was written to use the conditional lock as you mentioned.
This is not a problem and can easily be verified intuitively, but
Sparse can't sense it.
To refactor the code to silent `Sparse` is putting the cart before the
horse. NON-SENSE.

So... What do you think about who wants to send the patch to silence
the Sparse's warning message, nevertheless?
I know him who was just about to write the next patch by correcting
mistakes (Seems like he wrote the subject prefix to `net`, not a
`net-next`, what a foolish one).
Is he wasting his life and taking other people's invaluable time? What
do you think about it?
Edward Cree Oct. 3, 2024, 4:11 p.m. UTC | #5
On 03/10/2024 16:33, Moon Yeounsu wrote:
> On 03/10/2024 15:19, Eric Dumazet wrote:
>> It also does not know about conditional locking, it is quite useless.
> So... What do you think about who wants to send the patch to silence
> the Sparse's warning message, nevertheless?

Fwiw, my experience is that if I can't explain the locking to sparse
 that's usually a sign that the code is too complex and needs to be
 rewritten.
In general I'm in favour of patches to fix sparse warnings.  In this
 case it looks like what's needed is __cond_acquires, but the patch
 to implement that in sparse[1] doesn't seem to have gotten anywhere
 near Luc's tree.  (Yet it's present and occasionally used in the
 kernel...)  CCing the sparse ML to find out why.

-ed

[1]: https://lore.kernel.org/all/CAHk-=wjZfO9hGqJ2_hGQG3U_XzSh9_XaXze=HgPdvJbgrvASfA@mail.gmail.com/#t
Stephen Hemminger Oct. 3, 2024, 6:39 p.m. UTC | #6
On Thu, 3 Oct 2024 17:11:26 +0100
Edward Cree <ecree.xilinx@gmail.com> wrote:

> On 03/10/2024 16:33, Moon Yeounsu wrote:
> > On 03/10/2024 15:19, Eric Dumazet wrote:  
> >> It also does not know about conditional locking, it is quite useless.  
> > So... What do you think about who wants to send the patch to silence
> > the Sparse's warning message, nevertheless?  

In my experience, conditional locking is often a cause of bugs.
diff mbox series

Patch

diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 77b819cd995b..6b5ec9a44556 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -441,6 +441,7 @@  EXPORT_SYMBOL(neigh_changeaddr);
 
 static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev,
 			  bool skip_perm)
+	__acquires(&tbl->lock)
 {
 	write_lock_bh(&tbl->lock);
 	neigh_flush_dev(tbl, dev, skip_perm);
@@ -453,6 +454,7 @@  static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev,
 }
 
 int neigh_carrier_down(struct neigh_table *tbl, struct net_device *dev)
+	__acquires(&tbl->lock)
 {
 	__neigh_ifdown(tbl, dev, true);
 	return 0;
@@ -460,6 +462,7 @@  int neigh_carrier_down(struct neigh_table *tbl, struct net_device *dev)
 EXPORT_SYMBOL(neigh_carrier_down);
 
 int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
+	__acquires(&tbl->lock)
 {
 	__neigh_ifdown(tbl, dev, false);
 	return 0;
@@ -848,6 +851,7 @@  int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
 
 static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
 				    struct net_device *dev)
+	__releases(&tbl->lock)
 {
 	struct pneigh_entry *n, **np, *freelist = NULL;
 	u32 h;