dout(10) << " new subtree root, adjusting auth_pins" << dendl;
// adjust nested auth pins
- inode->adjust_nested_auth_pins(-get_cum_auth_pins());
+ inode->adjust_nested_auth_pins(get_cum_auth_pins() ? -1:0);
// unpin parent of frozen dir/tree?
if (inode->is_auth() && (is_frozen_tree_root() || is_frozen_dir()))
dout(10) << " old subtree root, adjusting auth_pins" << dendl;
// adjust nested auth pins
- inode->adjust_nested_auth_pins(get_cum_auth_pins());
+ inode->adjust_nested_auth_pins(get_cum_auth_pins() ? 1:0);
// pin parent of frozen dir/tree?
if (inode->is_auth() && (is_frozen_tree_root() || is_frozen_dir()))
if (is_subtree_root()) return; // no.
//assert(!is_import());
- inode->adjust_nested_auth_pins(1);
+ if (get_cum_auth_pins() == 1)
+ inode->adjust_nested_auth_pins(1);
}
void CDir::auth_unpin(void *by)
if (is_subtree_root()) return; // no.
//assert(!is_import());
- inode->adjust_nested_auth_pins(-1);
+ if (get_cum_auth_pins() == 0)
+ inode->adjust_nested_auth_pins(-1);
}
void CDir::adjust_nested_auth_pins(int inc, int dirinc)
return; // no, stop.
// yes.
- inode->adjust_nested_auth_pins(inc);
+ if (get_cum_auth_pins() == 0)
+ inode->adjust_nested_auth_pins(-1);
+ else if (get_cum_auth_pins() == inc)
+ inode->adjust_nested_auth_pins(1);
}
void CDir::adjust_nested_anchors(int by)