cap->issue_seq = 0; // reset seq.
cap->mseq = 0; // reset seq.
cap->issued = cap->implemented;
+
+ snapid_t snap_follows = 0;
+ if (!in->cap_snaps.empty())
+ snap_follows = in->cap_snaps.begin()->first;
+
m->add_cap(p->first.ino,
cap->cap_id,
path.get_ino(), path.get_path(), // ino
in->caps_wanted(), // wanted
cap->issued, // issued
in->snaprealm->ino,
+ snap_follows,
flockbl);
if (did_snaprealm.count(in->snaprealm->ino) == 0) {
ldout(cct, 10) << " snaprealm " << *in->snaprealm << dendl;
m->add_snaprealm(in->snaprealm->ino, in->snaprealm->seq, in->snaprealm->parent);
did_snaprealm.insert(in->snaprealm->ino);
- }
+ }
}
}
* cap_reconnect_t
*/
void cap_reconnect_t::encode(bufferlist& bl) const {
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
encode_old(bl); // extract out when something changes
+ ::encode(snap_follows, bl);
ENCODE_FINISH(bl);
}
void cap_reconnect_t::decode(bufferlist::iterator& bl) {
DECODE_START(1, bl);
decode_old(bl); // extract out when something changes
+ if (struct_v >= 2)
+ ::decode(snap_follows, bl);
DECODE_FINISH(bl);
}
struct cap_reconnect_t {
string path;
mutable ceph_mds_cap_reconnect capinfo;
+ snapid_t snap_follows;
bufferlist flockbl;
cap_reconnect_t() {
memset(&capinfo, 0, sizeof(capinfo));
+ snap_follows = 0;
}
cap_reconnect_t(uint64_t cap_id, inodeno_t pino, const string& p, int w, int i,
- inodeno_t sr, bufferlist& lb) :
+ inodeno_t sr, snapid_t sf, bufferlist& lb) :
path(p) {
capinfo.cap_id = cap_id;
capinfo.wanted = w;
capinfo.snaprealm = sr;
capinfo.pathbase = pino;
capinfo.flock_len = 0;
+ snap_follows = sf;
flockbl.claim(lb);
}
void encode(bufferlist& bl) const;
}
void add_cap(inodeno_t ino, uint64_t cap_id, inodeno_t pathbase, const string& path,
- int wanted, int issued, inodeno_t sr, bufferlist& lb)
+ int wanted, int issued, inodeno_t sr, snapid_t sf, bufferlist& lb)
{
- caps[ino] = cap_reconnect_t(cap_id, pathbase, path, wanted, issued, sr, lb);
+ caps[ino] = cap_reconnect_t(cap_id, pathbase, path, wanted, issued, sr, sf, lb);
}
void add_snaprealm(inodeno_t ino, snapid_t seq, inodeno_t parent) {
ceph_mds_snaprealm_reconnect r;