int count = 0;
uint64_t alloc_len = 0;
- AllocExtentVector extents = AllocExtentVector(left / min_alloc_size);
-
+ AllocExtentVector extents;
r = alloc[id]->allocate(left, min_alloc_size, hint,
&extents, &count, &alloc_len);
if (r < 0 || alloc_len < left) {
int count = 0;
uint64_t alloc_len = 0;
- AllocExtentVector exts = AllocExtentVector(gift / min_alloc_size);
- r = alloc->allocate(gift, cct->_conf->bluefs_alloc_size, 0, 0, &exts, &count, &alloc_len);
+ AllocExtentVector exts;
+ r = alloc->allocate(gift, cct->_conf->bluefs_alloc_size, 0, 0, &exts,
+ &count, &alloc_len);
if (r < 0 || alloc_len < gift) {
derr << __func__ << " allocate failed on 0x" << std::hex << gift
int count = 0;
uint64_t alloc_len = 0;
- AllocExtentVector extents = AllocExtentVector(final_length / min_alloc_size);
-
+ AllocExtentVector extents;
int r = alloc->allocate(final_length, min_alloc_size, max_alloc_size,
hint, &extents, &count, &alloc_len);
assert(r == 0 && alloc_len == final_length);
AllocExtent *last_extent = NULL;
bool can_merge = false;
- if (m_num_extents > 0) {
- last_extent = &((*m_extents)[m_num_extents - 1]);
+ if (!m_extents->empty()) {
+ last_extent = &(m_extents->back());
uint64_t last_offset = last_extent->end() / m_block_size;
uint32_t last_length = last_extent->length / m_block_size;
if ((last_offset == (uint64_t) start) &&
if (can_merge) {
last_extent->length += (count * m_block_size);
} else {
- (*m_extents)[m_num_extents].offset = start * m_block_size;
- (*m_extents)[m_num_extents].length = count * m_block_size;
- m_num_extents++;
+ m_extents->emplace_back(AllocExtent(start * m_block_size,
+ count * m_block_size));
}
- assert((int64_t) m_extents->size() >= m_num_extents);
}
// bluestore_bdev_label_t
class ExtentList {
AllocExtentVector *m_extents;
- int64_t m_num_extents;
int64_t m_block_size;
int64_t m_max_blocks;
public:
- void init(AllocExtentVector *extents, int64_t block_size, uint64_t max_alloc_size) {
+ void init(AllocExtentVector *extents, int64_t block_size,
+ uint64_t max_alloc_size) {
m_extents = extents;
- m_num_extents = 0;
m_block_size = block_size;
m_max_blocks = max_alloc_size / block_size;
+ assert(m_extents->empty());
}
ExtentList(AllocExtentVector *extents, int64_t block_size) {
init(extents, block_size, 0);
}
- ExtentList(AllocExtentVector *extents, int64_t block_size, uint64_t max_alloc_size) {
+ ExtentList(AllocExtentVector *extents, int64_t block_size,
+ uint64_t max_alloc_size) {
init(extents, block_size, max_alloc_size);
}
void reset() {
- m_num_extents = 0;
+ m_extents->clear();
}
void add_extents(int64_t start, int64_t count);
}
int64_t get_extent_count() {
- return m_num_extents;
+ return m_extents->size();
}
};