untangle fsnotify_d_instantiate() a bit
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 9 Mar 2016 22:58:49 +0000 (17:58 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 14 Mar 2016 04:17:28 +0000 (00:17 -0400)
First of all, don't bother calling it if inode is NULL -
that makes inode argument unused.  Moreover, do it *before*
dropping ->d_lock, not right after that (and don't bother
grabbing ->d_lock in it, of course).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c
include/linux/fsnotify.h
include/linux/fsnotify_backend.h

index 12280df07837c8b7176f5bf9606a957734481510..244fd2487fe99ba631cb4692498a5fdf79812506 100644 (file)
@@ -1750,8 +1750,9 @@ static void __d_instantiate(struct dentry *dentry, struct inode *inode)
        raw_write_seqcount_begin(&dentry->d_seq);
        __d_set_inode_and_type(dentry, inode, add_flags);
        raw_write_seqcount_end(&dentry->d_seq);
+       if (inode)
+               __fsnotify_d_instantiate(dentry);
        spin_unlock(&dentry->d_lock);
-       fsnotify_d_instantiate(dentry, inode);
 }
 
 /**
index 7ee1774edee51c7f872a8a9cc5c49fe0e8d83714..0141f257d67b6ae0f17890e11cef31f7ac6056f8 100644 (file)
 #include <linux/slab.h>
 #include <linux/bug.h>
 
-/*
- * fsnotify_d_instantiate - instantiate a dentry for inode
- */
-static inline void fsnotify_d_instantiate(struct dentry *dentry,
-                                         struct inode *inode)
-{
-       __fsnotify_d_instantiate(dentry, inode);
-}
-
 /* Notify this dentry's parent about a child's events. */
 static inline int fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask)
 {
index 6b7e89f45aa49e3eb1531c51f6edae4cc18d576a..827b249259f7fb4319de4ae602c7c64d1b4d87aa 100644 (file)
@@ -293,14 +293,9 @@ static inline void __fsnotify_update_dcache_flags(struct dentry *dentry)
 /*
  * fsnotify_d_instantiate - instantiate a dentry for inode
  */
-static inline void __fsnotify_d_instantiate(struct dentry *dentry, struct inode *inode)
+static inline void __fsnotify_d_instantiate(struct dentry *dentry)
 {
-       if (!inode)
-               return;
-
-       spin_lock(&dentry->d_lock);
        __fsnotify_update_dcache_flags(dentry);
-       spin_unlock(&dentry->d_lock);
 }
 
 /* called from fsnotify listeners, such as fanotify or dnotify */
@@ -399,7 +394,7 @@ static inline void __fsnotify_vfsmount_delete(struct vfsmount *mnt)
 static inline void __fsnotify_update_dcache_flags(struct dentry *dentry)
 {}
 
-static inline void __fsnotify_d_instantiate(struct dentry *dentry, struct inode *inode)
+static inline void __fsnotify_d_instantiate(struct dentry *dentry)
 {}
 
 static inline u32 fsnotify_get_cookie(void)