On Tue, 10 Mar 2020, Eric Dumazet wrote: > > > On 3/10/20 6:09 PM, Jules Irenge wrote: > > Sparse reports warnings at raw_seq_start() and raw_seq_stop() > > > > warning: context imbalance in raw_seq_start() - wrong count at exit > > warning: context imbalance in raw_seq_stop() - unexpected unlock > > > > The root cause is the missing annotations at raw_seq_start() > > and raw_seq_stop() > > Add the missing __acquires(&h->lock) annotation > > Add the missing __releases(&h->lock) annotation > > > > Signed-off-by: Jules Irenge <jbi.octave@xxxxxxxxx> > > --- > > net/ipv4/raw.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c > > index 3183413ebc6c..47665919048f 100644 > > --- a/net/ipv4/raw.c > > +++ b/net/ipv4/raw.c > > @@ -1034,6 +1034,7 @@ static struct sock *raw_get_idx(struct seq_file *seq, loff_t pos) > > } > > > > void *raw_seq_start(struct seq_file *seq, loff_t *pos) > > + __acquires(&h->lock) > > I dunno, h variable is not yet defined/declared at this point, > this looks weird. > > > { > > struct raw_hashinfo *h = PDE_DATA(file_inode(seq->file)); > > > > @@ -1056,6 +1057,7 @@ void *raw_seq_next(struct seq_file *seq, void *v, loff_t *pos) > > EXPORT_SYMBOL_GPL(raw_seq_next); > > > > void raw_seq_stop(struct seq_file *seq, void *v) > > + __releases(&h->lock) > > { > > struct raw_hashinfo *h = PDE_DATA(file_inode(seq->file)); > > > > > Thanks for the feedback, I think h is a pointer of type struct raw_hashinfo, in which member lock is initialized on line number 89. Kind regards