diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-02 02:30:45 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-02 02:30:45 +0300 |
commit | f691b77b1fc491dae601631c8531a0a13e915466 (patch) | |
tree | aef29eded65de2fcee4ca88b65c708f529069070 /include/linux | |
parent | 7d46af2084eabe73ce4dbf06072fded34b58b0c7 (diff) | |
parent | a528aca7f359f4b0b1d72ae406097e491a5ba9ea (diff) | |
download | linux-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.h | 4 |
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) |