@@ -176,18 +176,14 @@ BtreeLBAManager::get_mappings(
176176 auto key = pin->get_key ();
177177 auto intermediate_key = pin->get_raw_val ().get_laddr ();
178178 auto intermediate_len = pin->get_length ();
179- return _get_mappings (c, btree, intermediate_key, intermediate_len
180- ).si_then ([FNAME, c, laddr, length, key, intermediate_key,
181- intermediate_len, &ret](auto pin_list) {
182- ceph_assert (pin_list.size () == 1 );
183- auto & pin = pin_list.front ();
184- assert (!pin->is_indirect ());
185- assert (pin->get_key () <= intermediate_key);
186- assert (pin->get_key () + pin->get_length () >= intermediate_key + intermediate_len);
179+ return get_indirect_pin (c, btree, key, intermediate_key, intermediate_len
180+ ).si_then ([FNAME, c, &ret, laddr, length](auto pin) {
187181 TRACET (" {}~0x{:x} got indirect pin {}~0x{:x}->{}({}~0x{:x})" ,
188- c.trans , laddr, length, key, intermediate_len, intermediate_key,
189- pin->get_key (), pin->get_length ());
190- pin->make_indirect (key, intermediate_len, intermediate_key);
182+ c.trans , laddr, length,
183+ pin->get_key (), pin->get_length (),
184+ pin->get_intermediate_key (),
185+ pin->get_intermediate_base (),
186+ pin->get_intermediate_length ());
191187 ret.emplace_back (std::move (pin));
192188 return get_mappings_iertr::now ();
193189 });
@@ -235,6 +231,28 @@ BtreeLBAManager::_get_mappings(
235231 });
236232}
237233
234+ BtreeLBAManager::get_indirect_pin_ret
235+ BtreeLBAManager::get_indirect_pin (
236+ op_context_t <laddr_t > c,
237+ LBABtree& btree,
238+ laddr_t key,
239+ laddr_t intermediate_key,
240+ extent_len_t length)
241+ {
242+ return _get_mappings (c, btree, intermediate_key, length
243+ ).si_then ([key, intermediate_key, length](auto pin_list) {
244+ ceph_assert (pin_list.size () == 1 );
245+ auto & pin = pin_list.front ();
246+ assert (!pin->is_indirect ());
247+ assert (pin->get_key () <= intermediate_key);
248+ assert (pin->get_key () + pin->get_length () >= intermediate_key + length);
249+ pin->make_indirect (key, length, intermediate_key);
250+ assert (pin->get_key () == key);
251+ assert (pin->get_length () == length);
252+ return std::move (pin);
253+ });
254+ }
255+
238256BtreeLBAManager::get_mapping_ret
239257BtreeLBAManager::get_mapping (
240258 Transaction &t,
@@ -257,12 +275,14 @@ BtreeLBAManager::get_mapping(
257275 assert (laddr == pin->get_key ());
258276 auto len = pin->get_length ();
259277 laddr_t direct_laddr = pin->get_raw_val ().get_laddr ();
260- return _get_mapping (c, btree, direct_laddr
261- ).si_then ([FNAME, c, laddr, len](auto pin) {
262- ceph_assert (len == pin->get_length ());
263- TRACET (" {} got indirect pin->{}~0x{:x}" ,
264- c.trans , laddr, pin->get_key (), len);
265- pin->make_indirect (laddr, len);
278+ return get_indirect_pin (c, btree, laddr, direct_laddr, len
279+ ).si_then ([FNAME, c, laddr](auto pin) {
280+ TRACET (" {} got indirect pin {}~0x{:x}->{}({}~0x{:x})" ,
281+ c.trans , laddr,
282+ pin->get_key (), pin->get_length (),
283+ pin->get_intermediate_key (),
284+ pin->get_intermediate_base (),
285+ pin->get_intermediate_length ());
266286 return get_mapping_iertr::make_ready_future<LBAMappingRef>(std::move (pin));
267287 });
268288 });
0 commit comments