summaryrefslogtreecommitdiff
path: root/fs/ceph
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-04-16 12:58:02 -0700
committerSage Weil <sage@newdream.net>2010-05-17 15:25:27 -0700
commit1b7facc41b42c2ab904b2f88b64b1f8ca0ca6cb7 (patch)
tree43203661dfe2675979e32a477d598d0f7559c8ee /fs/ceph
parente8a7498715181ece36130335536e13733a5c3187 (diff)
ceph: don't clobber i_max_offset on already complete dir
This can screw up offsets assigned to new dentries and break dcache readdir results. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/inode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 49a0935c4390..aa22a0bce52f 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -675,7 +675,8 @@ static int fill_inode(struct inode *inode,
/* set dir completion flag? */
if (ci->i_files == 0 && ci->i_subdirs == 0 &&
ceph_snap(inode) == CEPH_NOSNAP &&
- (le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED)) {
+ (le32_to_cpu(info->cap.caps) & CEPH_CAP_FILE_SHARED) &&
+ (ci->i_ceph_flags & CEPH_I_COMPLETE) == 0) {
dout(" marking %p complete (empty)\n", inode);
ci->i_ceph_flags |= CEPH_I_COMPLETE;
ci->i_max_offset = 2;