<< " on " << *in << dendl;
in->reconnect_cap(from, p->second.capinfo, session);
mds->mdcache->add_reconnected_cap(in, from, inodeno_t(p->second.capinfo.snaprealm));
+ recover_filelocks(in, p->second.flockbl, m->get_orig_source().num());
continue;
}
}
}
+void Server::recover_filelocks(CInode *in, bufferlist locks, int64_t client)
+{
+ int numlocks;
+ ceph_filelock lock;
+ bufferlist::iterator p = locks.begin();
+ ::decode(numlocks, p);
+ for (int i = 0; i < numlocks; ++i) {
+ ::decode(lock, p);
+ lock.client = client;
+ in->fcntl_locks.held_locks.insert(pair<uint64_t, ceph_filelock>
+ (lock.start, lock));
+ ++in->fcntl_locks.client_held_lock_counts[client];
+ }
+ ::decode(numlocks, p);
+ for (int i = 0; i < numlocks; ++i) {
+ ::decode(lock, p);
+ lock.client = client;
+ in->flock_locks.held_locks.insert(pair<uint64_t, ceph_filelock>
+ (lock.start, lock));
+ ++in->flock_locks.client_held_lock_counts[client];
+ }
+}
+
void Server::recall_client_state(float ratio)
{
int max_caps_per_client = (int)(g_conf.mds_cache_size * .8);
//void process_reconnect_cap(CInode *in, int from, ceph_mds_cap_reconnect& capinfo);
void reconnect_gather_finish();
void reconnect_tick();
+ void recover_filelocks(CInode *in, bufferlist locks, int64_t client);
void recall_client_state(float ratio);