OSD::get_osdmap_pobject_name(e), 0, 0, bl,
CEPH_OSD_OP_FLAG_FADVISE_WILLNEED) >= 0;
if (found) {
+ if (!bl.is_page_aligned()) {
+ bl.rebuild_page_aligned();
+ }
_add_map_bl(e, bl);
}
return found;
OSD::get_inc_osdmap_pobject_name(e), 0, 0, bl,
CEPH_OSD_OP_FLAG_FADVISE_WILLNEED) >= 0;
if (found) {
+ if (!bl.is_page_aligned()) {
+ bl.rebuild_page_aligned();
+ }
_add_map_inc_bl(e, bl);
}
return found;
ceph_assert(ceph_mutex_is_locked(osd_lock));
map<epoch_t,OSDMapRef> added_maps;
- map<epoch_t,bufferlist> added_maps_bl;
if (m->fsid != monc->get_fsid()) {
dout(0) << "handle_osd_map fsid " << m->fsid << " != "
<< monc->get_fsid() << dendl;
OSDMap *o = new OSDMap;
bufferlist& bl = p->second;
+ if (!bl.is_page_aligned()) {
+ bl.rebuild_page_aligned();
+ }
o->decode(bl);
purged_snaps[e] = o->get_new_purged_snaps();
ghobject_t fulloid = get_osdmap_pobject_name(e);
t.write(coll_t::meta(), fulloid, 0, bl.length(), bl);
added_maps[e] = add_map(o);
- added_maps_bl[e] = bl;
got_full_map(e);
continue;
}
OSDMap *o = new OSDMap;
if (e > 1) {
- bufferlist obl;
- bool got = get_map_bl(e - 1, obl);
- if (!got) {
- auto p = added_maps_bl.find(e - 1);
- ceph_assert(p != added_maps_bl.end());
- obl = p->second;
- }
- o->decode(obl);
+ OSDMapRef prev;
+ auto p = added_maps.find(e - 1);
+ if (p != added_maps.end()) {
+ prev = p->second;
+ } else {
+ prev = get_map(e - 1);
+ }
+
+ o->deepish_copy_from(*prev);
}
OSDMap::Incremental inc;
+ if (!bl.is_page_aligned()) {
+ bl.rebuild_page_aligned();
+ }
auto p = bl.cbegin();
inc.decode(p);
ghobject_t fulloid = get_osdmap_pobject_name(e);
t.write(coll_t::meta(), fulloid, 0, fbl.length(), fbl);
added_maps[e] = add_map(o);
- added_maps_bl[e] = fbl;
continue;
}