summaryrefslogtreecommitdiff
path: root/fs/ceph/super.h
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-10-18 14:04:31 -0700
committerSage Weil <sage@newdream.net>2010-10-20 15:38:27 -0700
commitefa4c1206eaff047c474af2136748a58eb8cc33b (patch)
tree61f8957ed7735c01a6d6900a3c4c2c45d084c3a7 /fs/ceph/super.h
parent61413c2f594e6b63db2b14c70c2e7d8cf02f9c00 (diff)
downloadlinux-3.10-efa4c1206eaff047c474af2136748a58eb8cc33b.tar.gz
linux-3.10-efa4c1206eaff047c474af2136748a58eb8cc33b.tar.bz2
linux-3.10-efa4c1206eaff047c474af2136748a58eb8cc33b.zip
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.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index e2e904442ce..1886294e12f 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;
}