From af7fbac8bae1ef409ee32d644e7b8fae81a26ad4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 28 Apr 2010 16:12:06 -0700 Subject: [PATCH] --- yaml --- r: 190531 b: refs/heads/master c: ea1409f96197c1bffe5d7d5bc967b3445edcc1fa h: refs/heads/master i: 190529: 483ed608469c007e67d8becb275e6ef138365127 190527: 73bbcd971df75678f3a4a89792b593ef5de66a60 v: v3 --- [refs] | 2 +- trunk/fs/ceph/dir.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0f21deeb5c6e..743dd16283c7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5c6a2cdb4fe8aaf6b54f022c14f13d2a12b45914 +refs/heads/master: ea1409f96197c1bffe5d7d5bc967b3445edcc1fa diff --git a/trunk/fs/ceph/dir.c b/trunk/fs/ceph/dir.c index ea8ee2e526aa..650d2db5ed26 100644 --- a/trunk/fs/ceph/dir.c +++ b/trunk/fs/ceph/dir.c @@ -880,7 +880,16 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry, * do_request, above). If there is no trace, we need * to do it here. */ + + /* d_move screws up d_subdirs order */ + ceph_i_clear(new_dir, CEPH_I_COMPLETE); + d_move(old_dentry, new_dentry); + + /* ensure target dentry is invalidated, despite + rehashing bug in vfs_rename_dir */ + new_dentry->d_time = jiffies; + ceph_dentry(new_dentry)->lease_shared_gen = 0; } ceph_mdsc_put_request(req); return err;