continue;
if (export_pin != MDS_RANK_NONE) {
if (dir->is_subtree_root()) {
- // export subtrees ?
- queue = (export_pin != dir->get_dir_auth().first);
+ // set auxsubtree bit or export it
+ if (!dir->state_test(CDir::STATE_AUXSUBTREE) ||
+ export_pin != dir->get_dir_auth().first)
+ queue = true;
} else {
- // create aux subtrees
+ // create aux subtree or export it
queue = true;
}
} else {
mds->mdcache->try_subtree_merge(dir);
}
} else if (export_pin == mds->get_nodeid()) {
+ if (dir->state_test(CDir::STATE_CREATING) ||
+ dir->is_frozen() || dir->is_freezing()) {
+ // try again later
+ remove = false;
+ continue;
+ }
if (!dir->is_subtree_root()) {
- if (dir->state_test(CDir::STATE_CREATING) ||
- dir->is_frozen() || dir->is_freezing()) {
- // try again later
- remove = false;
- continue;
- }
dir->state_set(CDir::STATE_AUXSUBTREE);
mds->mdcache->adjust_subtree_auth(dir, mds->get_nodeid());
dout(10) << " create aux subtree on " << *dir << dendl;
+ } else if (!dir->state_test(CDir::STATE_AUXSUBTREE)) {
+ dout(10) << " set auxsubtree bit on " << *dir << dendl;
+ dir->state_set(CDir::STATE_AUXSUBTREE);
}
} else {
mds->mdcache->migrator->export_dir(dir, export_pin);