uint64_t length,
KeyValueDB::Transaction txn)
{
- uint64_t zone_num = offset / zone_size;
- dout(10) << __func__ << " 0x" << std::hex << offset << "~" << length
- << " zone 0x" << zone_num << std::dec << dendl;
- zone_state_t zone_state;
- zone_state.increment_write_pointer(length);
- write_zone_state_to_db(zone_num, zone_state, txn);
+ while (length > 0) {
+ uint64_t zone_num = offset / zone_size;
+ uint64_t this_len = std::min(length, zone_size - offset % zone_size);
+ dout(10) << __func__ << " 0x" << std::hex << offset << "~" << this_len
+ << " zone 0x" << zone_num << std::dec << dendl;
+ zone_state_t zone_state;
+ zone_state.increment_write_pointer(this_len);
+ write_zone_state_to_db(zone_num, zone_state, txn);
+ offset += this_len;
+ length -= this_len;
+ }
}
// Increments the number of dead bytes in a zone and writes the updated value to
uint64_t length,
KeyValueDB::Transaction txn)
{
- uint64_t zone_num = offset / zone_size;
- dout(10) << __func__ << " 0x" << std::hex << offset << "~" << length
- << " zone 0x" << zone_num << std::dec << dendl;
- zone_state_t zone_state;
- zone_state.increment_num_dead_bytes(length);
- write_zone_state_to_db(zone_num, zone_state, txn);
+ while (length > 0) {
+ uint64_t zone_num = offset / zone_size;
+ uint64_t this_len = std::min(length, zone_size - offset % zone_size);
+ dout(10) << __func__ << " 0x" << std::hex << offset << "~" << this_len
+ << " zone 0x" << zone_num << std::dec << dendl;
+ zone_state_t zone_state;
+ zone_state.increment_num_dead_bytes(this_len);
+ write_zone_state_to_db(zone_num, zone_state, txn);
+ length -= this_len;
+ offset += this_len;
+ }
}
void ZonedFreelistManager::get_meta(