On Tue, Jul 10, 2018 at 6:02 AM Jan Kara <jack@xxxxxxx> wrote: > Currently, audit_tree code uses mark->lock to protect against detaching > of mark from an inode. In most places it however also uses > mark->group->mark_mutex (as we need to atomically replace attached > marks) and this provides protection against mark detaching as well. So > just remove protection with mark->lock from audit tree code and replace > it with mark->group->mark_mutex protection in all the places. It > simplifies the code and gets rid of some ugly catches like calling > fsnotify_add_mark_locked() with mark->lock held (which cannot sleep only > because we hold a reference to another mark attached to the same inode). > > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > kernel/audit_tree.c | 24 ++++-------------------- > 1 file changed, 4 insertions(+), 20 deletions(-) ... > diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c > index 02feef939560..1c82eb6674c4 100644 > --- a/kernel/audit_tree.c > +++ b/kernel/audit_tree.c > @@ -360,12 +355,12 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree) > return -ENOSPC; > } > > - spin_lock(&entry->lock); > + mutex_lock(&entry->group->mark_mutex); I wonder if we could move the lock up above the fsnotify_add_inode_mark() earlier in create_chunk() and use fsnotify_add_mark_locked()? -- paul moore www.paul-moore.com