diff options
author | Sage Weil <sage@newdream.net> | 2010-10-18 14:04:31 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-10-20 15:38:27 -0700 |
commit | efa4c1206eaff047c474af2136748a58eb8cc33b (patch) | |
tree | 61f8957ed7735c01a6d6900a3c4c2c45d084c3a7 /fs/ceph/super.h | |
parent | 61413c2f594e6b63db2b14c70c2e7d8cf02f9c00 (diff) | |
download | op-kernel-dev-efa4c1206eaff047c474af2136748a58eb8cc33b.zip op-kernel-dev-efa4c1206eaff047c474af2136748a58eb8cc33b.tar.gz |
ceph: do not carry i_lock for readdir from dcache
We were taking dcache_lock inside of i_lock, which introduces a dependency
not found elsewhere in the kernel, complicationg the vfs locking
scalability work. Since we don't actually need it here anyway, remove
it.
We only need i_lock to test for the I_COMPLETE flag, so be careful to do
so without dcache_lock held.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index e2e9044..1886294 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -400,8 +400,9 @@ static inline bool ceph_i_test(struct inode *inode, unsigned mask) struct ceph_inode_info *ci = ceph_inode(inode); bool r; - smp_mb(); + spin_lock(&inode->i_lock); r = (ci->i_ceph_flags & mask) == mask; + spin_unlock(&inode->i_lock); return r; } |