audit: use fsnotify group lock helpers
authorAmir Goldstein <amir73il@gmail.com>
Fri, 22 Apr 2022 12:03:19 +0000 (15:03 +0300)
committerJan Kara <jack@suse.cz>
Mon, 25 Apr 2022 12:37:28 +0000 (14:37 +0200)
audit inode marks pin the inode so there is no need to set the
FSNOTIFY_GROUP_NOFS flag.

Link: https://lore.kernel.org/r/20220422120327.3459282-9-amir73il@gmail.com
Suggested-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20220321112310.vpr7oxro2xkz5llh@quack3.lan/
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
kernel/audit_tree.c

index b5c02f8..e867c17 100644 (file)
@@ -351,7 +351,7 @@ static void untag_chunk(struct audit_chunk *chunk, struct fsnotify_mark *mark)
        struct audit_chunk *new;
        int size;
 
-       mutex_lock(&audit_tree_group->mark_mutex);
+       fsnotify_group_lock(audit_tree_group);
        /*
         * mark_mutex stabilizes chunk attached to the mark so we can check
         * whether it didn't change while we've dropped hash_lock.
@@ -368,7 +368,7 @@ static void untag_chunk(struct audit_chunk *chunk, struct fsnotify_mark *mark)
                replace_mark_chunk(mark, NULL);
                spin_unlock(&hash_lock);
                fsnotify_detach_mark(mark);
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                audit_mark_put_chunk(chunk);
                fsnotify_free_mark(mark);
                return;
@@ -385,12 +385,12 @@ static void untag_chunk(struct audit_chunk *chunk, struct fsnotify_mark *mark)
         */
        replace_chunk(new, chunk);
        spin_unlock(&hash_lock);
-       mutex_unlock(&audit_tree_group->mark_mutex);
+       fsnotify_group_unlock(audit_tree_group);
        audit_mark_put_chunk(chunk);
        return;
 
 out_mutex:
-       mutex_unlock(&audit_tree_group->mark_mutex);
+       fsnotify_group_unlock(audit_tree_group);
 }
 
 /* Call with group->mark_mutex held, releases it */
@@ -400,19 +400,19 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree)
        struct audit_chunk *chunk = alloc_chunk(1);
 
        if (!chunk) {
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                return -ENOMEM;
        }
 
        mark = alloc_mark();
        if (!mark) {
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                kfree(chunk);
                return -ENOMEM;
        }
 
        if (fsnotify_add_inode_mark_locked(mark, inode, 0)) {
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                fsnotify_put_mark(mark);
                kfree(chunk);
                return -ENOSPC;
@@ -422,7 +422,7 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree)
        if (tree->goner) {
                spin_unlock(&hash_lock);
                fsnotify_detach_mark(mark);
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                fsnotify_free_mark(mark);
                fsnotify_put_mark(mark);
                kfree(chunk);
@@ -444,7 +444,7 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree)
         */
        insert_hash(chunk);
        spin_unlock(&hash_lock);
-       mutex_unlock(&audit_tree_group->mark_mutex);
+       fsnotify_group_unlock(audit_tree_group);
        /*
         * Drop our initial reference. When mark we point to is getting freed,
         * we get notification through ->freeing_mark callback and cleanup
@@ -462,7 +462,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
        struct audit_node *p;
        int n;
 
-       mutex_lock(&audit_tree_group->mark_mutex);
+       fsnotify_group_lock(audit_tree_group);
        mark = fsnotify_find_mark(&inode->i_fsnotify_marks, audit_tree_group);
        if (!mark)
                return create_chunk(inode, tree);
@@ -478,7 +478,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
        for (n = 0; n < old->count; n++) {
                if (old->owners[n].owner == tree) {
                        spin_unlock(&hash_lock);
-                       mutex_unlock(&audit_tree_group->mark_mutex);
+                       fsnotify_group_unlock(audit_tree_group);
                        fsnotify_put_mark(mark);
                        return 0;
                }
@@ -487,7 +487,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
 
        chunk = alloc_chunk(old->count + 1);
        if (!chunk) {
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                fsnotify_put_mark(mark);
                return -ENOMEM;
        }
@@ -495,7 +495,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
        spin_lock(&hash_lock);
        if (tree->goner) {
                spin_unlock(&hash_lock);
-               mutex_unlock(&audit_tree_group->mark_mutex);
+               fsnotify_group_unlock(audit_tree_group);
                fsnotify_put_mark(mark);
                kfree(chunk);
                return 0;
@@ -515,7 +515,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
         */
        replace_chunk(chunk, old);
        spin_unlock(&hash_lock);
-       mutex_unlock(&audit_tree_group->mark_mutex);
+       fsnotify_group_unlock(audit_tree_group);
        fsnotify_put_mark(mark); /* pair to fsnotify_find_mark */
        audit_mark_put_chunk(old);
 
@@ -1044,12 +1044,12 @@ static void audit_tree_freeing_mark(struct fsnotify_mark *mark,
 {
        struct audit_chunk *chunk;
 
-       mutex_lock(&mark->group->mark_mutex);
+       fsnotify_group_lock(mark->group);
        spin_lock(&hash_lock);
        chunk = mark_chunk(mark);
        replace_mark_chunk(mark, NULL);
        spin_unlock(&hash_lock);
-       mutex_unlock(&mark->group->mark_mutex);
+       fsnotify_group_unlock(mark->group);
        if (chunk) {
                evict_chunk(chunk);
                audit_mark_put_chunk(chunk);