ceph: use new D_COMPLETE dentry flag
We used to use a flag on the directory inode to track whether the dcache contents for a directory were a complete cached copy. Switch to a dentry flag CEPH_D_COMPLETE that is safely updated by ->d_prune(). Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
@@ -771,9 +771,9 @@ no_change:
|
||||
ceph_snap(inode) == CEPH_NOSNAP &&
|
||||
(le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED) &&
|
||||
(issued & CEPH_CAP_FILE_EXCL) == 0 &&
|
||||
(ci->i_ceph_flags & CEPH_I_COMPLETE) == 0) {
|
||||
!ceph_dir_test_complete(inode)) {
|
||||
dout(" marking %p complete (empty)\n", inode);
|
||||
/* ci->i_ceph_flags |= CEPH_I_COMPLETE; */
|
||||
ceph_dir_set_complete(inode);
|
||||
ci->i_max_offset = 2;
|
||||
}
|
||||
|
||||
@@ -856,7 +856,7 @@ static void ceph_set_dentry_offset(struct dentry *dn)
|
||||
di = ceph_dentry(dn);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
if ((ceph_inode(inode)->i_ceph_flags & CEPH_I_COMPLETE) == 0) {
|
||||
if (!ceph_dir_test_complete(inode)) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
return;
|
||||
}
|
||||
@@ -1056,7 +1056,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
|
||||
* d_move() puts the renamed dentry at the end of
|
||||
* d_subdirs. We need to assign it an appropriate
|
||||
* directory offset so we can behave when holding
|
||||
* I_COMPLETE.
|
||||
* D_COMPLETE.
|
||||
*/
|
||||
ceph_set_dentry_offset(req->r_old_dentry);
|
||||
dout("dn %p gets new offset %lld\n", req->r_old_dentry,
|
||||
|
Reference in New Issue
Block a user