aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/mds_client.c
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-03-13 07:44:32 -0400
committerSage Weil <sage@inktank.com>2013-05-02 00:17:07 -0400
commit2f276c511137d97e56b19e29865e1e6569315ccb (patch)
treef29a8088a6f312ec40f03b96d96b34e69154627a /fs/ceph/mds_client.c
parent8a166d05369f6a0369bb194a795e6e3928ac6e34 (diff)
ceph: use i_release_count to indicate dir's completeness
Current ceph code tracks directory's completeness in two places. ceph_readdir() checks i_release_count to decide if it can set the I_COMPLETE flag in i_ceph_flags. All other places check the I_COMPLETE flag. This indirection introduces locking complexity. This patch adds a new variable i_complete_count to ceph_inode_info. Set i_release_count's value to it when marking a directory complete. By comparing the two variables, we know if a directory is complete Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Diffstat (limited to 'fs/ceph/mds_client.c')
-rw-r--r--fs/ceph/mds_client.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 600d770d70f7..0db6f5206d11 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -2034,20 +2034,16 @@ out:
2034} 2034}
2035 2035
2036/* 2036/*
2037 * Invalidate dir I_COMPLETE, dentry lease state on an aborted MDS 2037 * Invalidate dir's completeness, dentry lease state on an aborted MDS
2038 * namespace request. 2038 * namespace request.
2039 */ 2039 */
2040void ceph_invalidate_dir_request(struct ceph_mds_request *req) 2040void ceph_invalidate_dir_request(struct ceph_mds_request *req)
2041{ 2041{
2042 struct inode *inode = req->r_locked_dir; 2042 struct inode *inode = req->r_locked_dir;
2043 struct ceph_inode_info *ci = ceph_inode(inode);
2044 2043
2045 dout("invalidate_dir_request %p (I_COMPLETE, lease(s))\n", inode); 2044 dout("invalidate_dir_request %p (complete, lease(s))\n", inode);
2046 spin_lock(&ci->i_ceph_lock);
2047 ci->i_ceph_flags &= ~CEPH_I_COMPLETE;
2048 ci->i_release_count++;
2049 spin_unlock(&ci->i_ceph_lock);
2050 2045
2046 ceph_dir_clear_complete(inode);
2051 if (req->r_dentry) 2047 if (req->r_dentry)
2052 ceph_invalidate_dentry_lease(req->r_dentry); 2048 ceph_invalidate_dentry_lease(req->r_dentry);
2053 if (req->r_old_dentry) 2049 if (req->r_old_dentry)