VFS: Impose ordering on accesses of d_inode and d_flags
authorDavid Howells <dhowells@redhat.com>
Thu, 5 Mar 2015 14:09:22 +0000 (14:09 +0000)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 15 Apr 2015 19:05:28 +0000 (15:05 -0400)
commit4bf46a272647d89e780126b52eda04737defd9f4
tree989bac3ffce8a0f7f9184e14afb2dd9c28693cfe
parent525d27b23555419e0e7b73fb6e78d4d678cb4f32
VFS: Impose ordering on accesses of d_inode and d_flags

Impose ordering on accesses of d_inode and d_flags to avoid the need to do
this:

if (!dentry->d_inode || d_is_negative(dentry)) {

when this:

if (d_is_negative(dentry)) {

should suffice.

This check is especially problematic if a dentry can have its type field set
to something other than DENTRY_MISS_TYPE when d_inode is NULL (as in
unionmount).

What we really need to do is stick a write barrier between setting d_inode and
setting d_flags and a read barrier between reading d_flags and reading
d_inode.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c
include/linux/dcache.h