summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-03-02 02:30:45 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2016-03-02 02:30:45 +0300
commitf691b77b1fc491dae601631c8531a0a13e915466 (patch)
treeaef29eded65de2fcee4ca88b65c708f529069070 /include/linux
parent7d46af2084eabe73ce4dbf06072fded34b58b0c7 (diff)
parenta528aca7f359f4b0b1d72ae406097e491a5ba9ea (diff)
downloadlinux-f691b77b1fc491dae601631c8531a0a13e915466.tar.xz
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull d_inode/d_flags race fix from Al Viro. I love this fix. Not only does it fix the race in the dentry type handling, it entirely gets rid of the nasty and subtle memory ordering rules for d_type and d_inode, and replaces them with the basic dentry locking rules (sequence numbers under RCU, d_lock elsewhere). * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: use ->d_seq to get coherency between ->d_inode and ->d_flags
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dcache.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 7781ce110503..c4b5f4b3f8f8 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -409,9 +409,7 @@ static inline bool d_mountpoint(const struct dentry *dentry)
*/
static inline unsigned __d_entry_type(const struct dentry *dentry)
{
- unsigned type = READ_ONCE(dentry->d_flags);
- smp_rmb();
- return type & DCACHE_ENTRY_TYPE;
+ return dentry->d_flags & DCACHE_ENTRY_TYPE;
}
static inline bool d_is_miss(const struct dentry *dentry)