diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-03-13 07:44:32 -0400 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-02 00:17:07 -0400 |
commit | 2f276c511137d97e56b19e29865e1e6569315ccb (patch) | |
tree | f29a8088a6f312ec40f03b96d96b34e69154627a /fs/ceph/mds_client.c | |
parent | 8a166d05369f6a0369bb194a795e6e3928ac6e34 (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.c | 10 |
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 | */ |
2040 | void ceph_invalidate_dir_request(struct ceph_mds_request *req) | 2040 | void 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) |