From: Sage Weil Date: Fri, 16 Apr 2010 19:56:11 +0000 (-0700) Subject: ceph: clear dir complete on d_move X-Git-Tag: v2.6.34-rc7~32^2~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c10f5e12bafde7f7a2f9b75d76f7a68d62154e91;p=platform%2Fkernel%2Flinux-3.10.git ceph: clear dir complete on d_move d_move() reorders the d_subdirs list, breaking the readdir result caching. Unless/until d_move preserves that ordering, clear CEPH_I_COMPLETE on rename. Signed-off-by: Sage Weil --- diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 26f883c..261f3e6 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -997,6 +997,10 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req, dn, dn->d_name.len, dn->d_name.name); dout("fill_trace doing d_move %p -> %p\n", req->r_old_dentry, dn); + + /* d_move screws up d_subdirs order */ + ceph_i_clear(dir, CEPH_I_COMPLETE); + d_move(req->r_old_dentry, dn); dout(" src %p '%.*s' dst %p '%.*s'\n", req->r_old_dentry,