It's highly probable that the last page in the bit vector will not
be a full page size. As a result, the computed extents will extend
beyond the data portion of the bit vector, resulting in a end_of_buffer
exception.
Fixes: #12611
Backport: hammer
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit
c6d98992691683524d3d96def83a90a6f5fe7f93)
end_offset += (CEPH_PAGE_SIZE - (end_offset % CEPH_PAGE_SIZE));
assert(*byte_offset <= end_offset);
- *byte_length = MIN(end_offset - *byte_offset, m_data.length());
+ *byte_length = end_offset - *byte_offset;
+ if (*byte_offset + *byte_length > m_data.length()) {
+ *byte_length = m_data.length() - *byte_offset;
+ }
}
template <uint8_t _b>