summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-06-15 19:15:40 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2013-06-17 19:14:06 +0800
commit7f5d6e5c4a3cf246ee55c7393c57d20b464b2e3b (patch)
tree3f857e27a6d43c1d729474d9a57eb5bf0320a68b
parent1d86f77edf0b560b38ad61897a009636943a3508 (diff)
downloadceph-7f5d6e5c4a3cf246ee55c7393c57d20b464b2e3b.tar.gz
mds: don't journal bare dirfrag
don't journal bare dirfrag when starting scatter. also add debug code for bare dirfrag modification. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/CDir.cc1
-rw-r--r--src/mds/CInode.cc2
-rw-r--r--src/mds/Server.cc5
3 files changed, 6 insertions, 2 deletions
diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc
index 211cec08b4f..8c83eba0ad9 100644
--- a/src/mds/CDir.cc
+++ b/src/mds/CDir.cc
@@ -1211,6 +1211,7 @@ void CDir::finish_waiting(uint64_t mask, int result)
fnode_t *CDir::project_fnode()
{
+ assert(get_version() != 0);
fnode_t *p = new fnode_t;
*p = *get_projected_fnode();
projected_fnode.push_back(p);
diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc
index 4a592bcf8d6..8936acdd5ae 100644
--- a/src/mds/CInode.cc
+++ b/src/mds/CInode.cc
@@ -1625,6 +1625,8 @@ void CInode::finish_scatter_update(ScatterLock *lock, CDir *dir,
if (dir->is_frozen()) {
dout(10) << "finish_scatter_update " << fg << " frozen, marking " << *lock << " stale " << *dir << dendl;
+ } else if (dir->get_version() == 0) {
+ dout(10) << "finish_scatter_update " << fg << " not loaded, marking " << *lock << " stale " << *dir << dendl;
} else {
if (dir_accounted_version != inode_version) {
dout(10) << "finish_scatter_update " << fg << " journaling accounted scatterstat update v" << inode_version << dendl;
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 00bf0181e5f..1d16d04dc3d 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -4010,7 +4010,8 @@ public:
if (newi->inode.is_dir()) {
CDir *dir = newi->get_dirfrag(frag_t());
assert(dir);
- dir->mark_dirty(1, mdr->ls);
+ dir->fnode.version--;
+ dir->mark_dirty(dir->fnode.version + 1, mdr->ls);
dir->mark_new(mdr->ls);
}
@@ -4169,7 +4170,7 @@ void Server::handle_client_mkdir(MDRequest *mdr)
// ...and that new dir is empty.
CDir *newdir = newi->get_or_open_dirfrag(mds->mdcache, frag_t());
newdir->mark_complete();
- newdir->pre_dirty();
+ newdir->fnode.version = newdir->pre_dirty();
// prepare finisher
mdr->ls = mdlog->get_current_segment();