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)); > >