Message ID | 20200413214240.15245-1-jbi.octave@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] fsnotify: Add missing annotation for fsnotify_finish_user_wait() and for fsnotify_prepare_user_wait() | expand |
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@gmail.com> > --- > 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 >
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;
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. Signed-off-by: Jules Irenge <jbi.octave@gmail.com> --- changes since v2 -include annotations for fsnotify_prepare_user_wait() fs/notify/mark.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)