| 196 | } |
| 197 | |
| 198 | void ECExtentCacheL::present_rmw_update( |
| 199 | const hobject_t &oid, |
| 200 | write_pin &pin, |
| 201 | const extent_map &extents) |
| 202 | { |
| 203 | if (extents.empty()) { |
| 204 | return; |
| 205 | } |
| 206 | auto &eset = get_or_create(oid); |
| 207 | for (auto &&res: extents) { |
| 208 | eset.traverse_update( |
| 209 | pin, |
| 210 | res.get_off(), |
| 211 | res.get_len(), |
| 212 | [&](uint64_t off, uint64_t len, |
| 213 | extent *ext, object_extent_set::update_action *action) { |
| 214 | action->action = object_extent_set::update_action::NONE; |
| 215 | ceph_assert(ext && ext->pinned_by_write()); |
| 216 | action->bl = bufferlist(); |
| 217 | action->bl->substr_of( |
| 218 | res.get_val(), |
| 219 | off - res.get_off(), |
| 220 | len); |
| 221 | }); |
| 222 | } |
| 223 | } |
| 224 | |
| 225 | ostream &ECExtentCacheL::print(ostream &out) const |
| 226 | { |