diff --git a/src/TODO b/src/TODO index bdc3b297cd12e..ca21c5c3e63bd 100644 --- a/src/TODO +++ b/src/TODO @@ -60,10 +60,7 @@ filestore - need an osdmap cache layer? bugs -- mds: rdlock forwards to auth on inode file lock, leading to an infinite forward loop if dirfrag is a subtree on another node. -- mds states - - closing -> opening transition -- mds prepare_force_open_sessions, then import aborts.. session is still OPENING but no client_session is sent... +- mds rejoin: invented dirfrags (MDCache.cc:3469) have version=0; subsequent modification of dentries/inodes predirty a bad (small) version #. - rm -r failure (on kernel tree) - dbench 1, restart mds (may take a few times), dbench will error out. diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 01171b624ae01..429efcafb40f8 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -3460,12 +3460,14 @@ void MDCache::handle_cache_rejoin_strong(MMDSCacheRejoin *strong) CDir *dir = get_dirfrag(p->first); if (!dir) { CInode *in = get_inode(p->first.ino); - if (!in) in = rejoin_invent_inode(p->first.ino, CEPH_NOSNAP); + if (!in) + in = rejoin_invent_inode(p->first.ino, CEPH_NOSNAP); if (!in->is_dir()) { assert(in->state_test(CInode::STATE_REJOINUNDEF)); in->inode.mode = S_IFDIR; } dir = in->get_or_open_dirfrag(this, p->first.frag); + dout(10) << " invented " << *dir << dendl; } else { dout(10) << " have " << *dir << dendl; }