void CInode::encode_snap_blob(bufferlist &snapbl)
{
if (snaprealm) {
- ::encode(*snaprealm, snapbl);
+ ::encode(snaprealm->srnode, snapbl);
dout(20) << "encode_snap_blob " << *snaprealm << dendl;
}
}
if (snapbl.length()) {
open_snaprealm();
bufferlist::iterator p = snapbl.begin();
- ::decode(*snaprealm, p);
+ ::decode(snaprealm->srnode, p);
dout(20) << "decode_snap_blob " << *snaprealm << dendl;
}
}
CDentry *olddn = dn->dir->add_primary_dentry(dn->name, oldin, oldfirst, follows);
oldin->inode.version = olddn->pre_dirty();
dout(10) << " olddn " << *olddn << dendl;
- bufferlist snapbl;
- if (dnl->get_inode()->projected_nodes.back()->snapnode)
- dnl->get_inode()->projected_nodes.back()->snapnode->encode(snapbl);
- metablob->add_primary_dentry(olddn, true, 0, 0, (snapbl.length() ? &snapbl : NULL));
+ metablob->add_primary_dentry(olddn, true, 0, 0);
mut->add_cow_dentry(olddn);
} else {
assert(dnl->is_remote());
px = &in->xattrs;
bufferlist snapbl;
- if (psnapbl)
+ if (psnapbl) {
snapbl = *psnapbl;
- else
- in->encode_snap_blob(snapbl);
+ } else {
+ sr_t *sr = in->get_projected_srnode();
+ if (sr)
+ sr->encode(snapbl);
+ }
+
lump.nfull++;
lump.get_dfull().push_back(std::tr1::shared_ptr<fullbit>(new fullbit(dn->get_name(),
void encode(bufferlist& bl) const {
- __u8 struct_v = 1;
+ __u8 struct_v = 3;
::encode(struct_v, bl);
::encode(seq, bl);
::encode(created, bl);
void decode(bufferlist::iterator& p) {
__u8 struct_v;
::decode(struct_v, p);
+ if (struct_v == 2)
+ ::decode(struct_v, p);
::decode(seq, p);
::decode(created, p);
::decode(last_created, p);
// realm state
sr_t srnode;
- void encode(bufferlist& bl) const {
- __u8 struct_v = 2;
- ::encode(struct_v, bl);
- ::encode(srnode, bl);
- }
- void decode(bufferlist::iterator& p) {
- __u8 struct_v;
- ::decode(struct_v, p);
- if (struct_v >= 2)
- ::decode(srnode, p);
- else {
- ::decode(srnode.seq, p);
- ::decode(srnode.created, p);
- ::decode(srnode.last_created, p);
- ::decode(srnode.last_destroyed, p);
- ::decode(srnode.current_parent_since, p);
- ::decode(srnode.snaps, p);
- ::decode(srnode.past_parents, p);
- }
- }
// in-memory state
MDCache *mdcache;
}
};
-WRITE_CLASS_ENCODER(SnapRealm)
ostream& operator<<(ostream& out, const SnapRealm &realm);