On Mon 13-04-20 22:42:40, Jules Irenge wrote: > Sparse reports warnings at fsnotify_prepare_user_wait() > and at fsnotify_finish_user_wait() > > warning: context imbalance in fsnotify_finish_user_wait() > - wrong count at exit > warning: context imbalance in fsnotify_prepare_user_wait() > - unexpected unlock > > The root cause is the missing annotation at fsnotify_finish_user_wait() > and at fsnotify_prepare_user_wait() > fsnotify_prepare_user_wait() has an extra annotation __release() > that only tell Sparse and not GCC to shutdown the warning > > Add the missing __acquires(&fsnotify_mark_srcu) annotation > Add the missing __releases(&fsnotify_mark_srcu) annotation > Add the __release(&fsnotify_mark_srcu) annotation. Thanks for the patch. I've added it to my tree. Honza > > Signed-off-by: Jules Irenge <jbi.octave@xxxxxxxxx> > --- > changes since v2 > -include annotations for fsnotify_prepare_user_wait() > > fs/notify/mark.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/notify/mark.c b/fs/notify/mark.c > index 1d96216dffd1..8387937b9d01 100644 > --- a/fs/notify/mark.c > +++ b/fs/notify/mark.c > @@ -325,13 +325,16 @@ static void fsnotify_put_mark_wake(struct fsnotify_mark *mark) > } > > bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info) > + __releases(&fsnotify_mark_srcu) > { > int type; > > fsnotify_foreach_obj_type(type) { > /* This can fail if mark is being removed */ > - if (!fsnotify_get_mark_safe(iter_info->marks[type])) > + if (!fsnotify_get_mark_safe(iter_info->marks[type])) { > + __release(&fsnotify_mark_srcu); > goto fail; > + } > } > > /* > @@ -350,6 +353,7 @@ bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info) > } > > void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info) > + __acquires(&fsnotify_mark_srcu) > { > int type; > > -- > 2.24.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR