undo "fs: allow d_instantiate to be called with negative parent dentry"
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 May 2016 17:49:56 +0000 (13:49 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 May 2016 18:41:11 +0000 (14:41 -0400)
Background: spufs used to mangle the order in which it had been building
dentry trees.  It was broken in a lot of ways, but most of them required
the right timing to trigger until an fsnotify change had added one more
- the one that was always triggered.

Unfortunately, insteading of fixing their long-standing bug the spufs
folks had chosen to paper over the fsnotify trigger.  Eventually said
bug had been spotted and killed off, but the pointless check in
fsnotify has remained, complete with the implication that one *could*
do that kind of crap.

Again, a parent of any dentry should always be positive.  Any code
can rely upon that and anything violating that assert is a bug,
*not* something to be accomodated.

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

index 29f9175..d188a10 100644 (file)
@@ -281,7 +281,7 @@ static inline void __fsnotify_update_dcache_flags(struct dentry *dentry)
         * us with the new state.
         */
        parent = dentry->d_parent;
-       if (parent->d_inode && fsnotify_inode_watches_children(parent->d_inode))
+       if (fsnotify_inode_watches_children(parent->d_inode))
                dentry->d_flags |= DCACHE_FSNOTIFY_PARENT_WATCHED;
        else
                dentry->d_flags &= ~DCACHE_FSNOTIFY_PARENT_WATCHED;