// finish clean-up?
if (it->second.state == EXPORT_CANCELLED) {
- // wake up any waiters
- mds->queue_waiters(it->second.waiting_for_finish);
-
MutationRef mut = it->second.mut;
export_state.erase(it);
// .. unwind ..
dir->unfreeze_tree();
dir->state_clear(CDir::STATE_EXPORTING);
- mds->queue_waiters(it->second.waiting_for_finish);
mds->send_message_mds(new MExportDirCancel(dir->dirfrag(), it->second.tid), it->second.peer);
// discard delayed expires
cache->discard_delayed_expire(dir);
- // queue finishers
- mds->queue_waiters(it->second.waiting_for_finish);
-
MutationRef mut = it->second.mut;
// remove from exporting list, clean up state
export_state.erase(it);
set<mds_rank_t> warning_ack_waiting;
set<mds_rank_t> notify_ack_waiting;
map<inodeno_t,map<client_t,Capability::Import> > peer_imported;
- list<MDSInternalContextBase*> waiting_for_finish;
MutationRef mut;
// for freeze tree deadlock detection
utime_t last_cum_auth_pins_change;
map<inodeno_t,map<client_t,Capability::Import> >& peer_imported,
list<MDSInternalContextBase*>& finished, int *num_dentries);
- void add_export_finish_waiter(CDir *dir, MDSInternalContextBase *c) {
- map<CDir*, export_state_t>::iterator it = export_state.find(dir);
- assert(it != export_state.end());
- it->second.waiting_for_finish.push_back(c);
- }
void clear_export_proxy_pins(CDir *dir);
void export_caps(CInode *in);