[PATCH 16/35] fsnotify: Avoid double locking in fsnotify_detach_from_object()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We lock object list lock in fsnotify_detach_from_object() twice - once
to detach mark and second time to recalculate mask. That is unnecessary
and later it will become problematic as we will free the connector as
soon as there is no mark in it. So move recalculation of fsnotify mask
into the same critical section that is detaching mark.

This also removes recalculation of child dentry flags from
fsnotify_detach_from_object(). That is however fine. Those marks will
get recalculated once some event happens on a child.

Reviewed-by: Miklos Szeredi <mszeredi@xxxxxxxxxx>
Signed-off-by: Jan Kara <jack@xxxxxxx>
---
 fs/notify/mark.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/notify/mark.c b/fs/notify/mark.c
index 08ab7b252322..416ba91750a9 100644
--- a/fs/notify/mark.c
+++ b/fs/notify/mark.c
@@ -158,9 +158,9 @@ static struct inode *fsnotify_detach_from_object(struct fsnotify_mark *mark)
 		if (conn->flags & FSNOTIFY_OBJ_TYPE_INODE)
 			inode = conn->inode;
 	}
+	__fsnotify_recalc_mask(conn);
 	mark->connector = NULL;
 	spin_unlock(lock);
-	fsnotify_recalc_mask(conn);
 
 	return inode;
 }
-- 
2.10.2




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux