]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
fsnotify: Add missing annotation for fsnotify_finish_user_wait() and for fsnotify_pre...
authorJules Irenge <jbi.octave@gmail.com>
Mon, 13 Apr 2020 21:42:40 +0000 (22:42 +0100)
committerJan Kara <jack@suse.cz>
Wed, 15 Apr 2020 09:44:43 +0000 (11:44 +0200)
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.

Link: https://lore.kernel.org/r/20200413214240.15245-1-jbi.octave@gmail.com
Signed-off-by: Jules Irenge <jbi.octave@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/notify/mark.c

index 1d96216dffd196637fb4e8f50182d7a95ee0111d..8387937b9d01c4cdc8132392a3f682c5696b468e 100644 (file)
@@ -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 @@ fail:
 }
 
 void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info)
+       __acquires(&fsnotify_mark_srcu)
 {
        int type;