size_t offset,
size_t length,
const bufferlist &bl,
- vector<char>* csum_data
+ bufferptr* csum_data
) {
assert(length % csum_block_size == 0);
size_t blocks = length / csum_block_size;
typename Alg::state_t state;
Alg::init(&state);
- assert(csum_data->size() >= (offset + length) / csum_block_size *
+ assert(csum_data->length() >= (offset + length) / csum_block_size *
sizeof(typename Alg::value_t));
typename Alg::value_t *pv =
- reinterpret_cast<typename Alg::value_t*>(&(*csum_data)[0]);
+ reinterpret_cast<typename Alg::value_t*>(csum_data->c_str());
pv += offset / csum_block_size;
while (blocks--) {
*pv = Alg::calc(state, csum_block_size, p);
size_t offset,
size_t length,
const bufferlist &bl,
- const vector<char>& csum_data
+ const bufferptr& csum_data
) {
assert(length % csum_block_size == 0);
bufferlist::const_iterator p = bl.begin();
Alg::init(&state);
const typename Alg::value_t *pv =
- reinterpret_cast<const typename Alg::value_t*>(&csum_data[0]);
+ reinterpret_cast<const typename Alg::value_t*>(csum_data.c_str());
pv += offset / csum_block_size;
size_t pos = offset;
while (length > 0) {
for (auto& b : o->onode.blob_map) {
dout(log_level) << __func__ << " " << b.first << ": " << b.second
<< dendl;
- if (b.second.csum_data.size()) {
+ if (b.second.has_csum_data()) {
vector<uint64_t> v;
unsigned n = b.second.get_csum_count();
for (unsigned i = 0; i < n; ++i)
dout(log_level) << __func__ << " " << std::hex << b->hash << std::dec << dendl;
for (auto &p : b->blob_map) {
dout(log_level) << __func__ << " " << p.first << ": " << p.second << dendl;
- if (p.second.csum_data.size()) {
+ if (p.second.has_csum_data()) {
vector<uint64_t> v;
unsigned n = p.second.get_csum_count();
for (unsigned i = 0; i < n; ++i)
ls.push_back(new bluestore_blob_t(4096, bluestore_pextent_t(111, 222), 12));
ls.back()->csum_type = CSUM_XXHASH32;
ls.back()->csum_block_order = 16;
- ls.back()->csum_data = vector<char>{1, 2, 3, 4}; // one uint32_t
+ ls.back()->csum_data = buffer::claim_malloc(4, strdup("abcd"));
ls.back()->ref_map.get(3, 5);
ls.back()->add_unused(0, 3);
ls.back()->add_unused(8, 8);
bluestore_extent_ref_map_t ref_map; ///< references (empty when in onode)
interval_set<uint32_t> unused; ///< portion that has never been written to
- vector<char> csum_data; ///< opaque vector of csum data
+ bufferptr csum_data; ///< opaque vector of csum data
bluestore_blob_t(uint32_t l = 0, uint32_t f = 0)
: length(l),
}
bool has_csum_data() const {
- return csum_data.size() > 0;
+ return csum_data.length() > 0;
}
uint32_t get_csum_block_size() const {
size_t vs = get_csum_value_size();
if (!vs)
return 0;
- return csum_data.size() / vs;
+ return csum_data.length() / vs;
}
uint64_t get_csum_item(unsigned i) const {
size_t cs = get_csum_value_size();
- const char *p = &csum_data[cs * i];
+ const char *p = csum_data.c_str();
switch (cs) {
case 0:
assert(0 == "no csum data, bad index");
}
const char *get_csum_item_ptr(unsigned i) const {
size_t cs = get_csum_value_size();
- return &csum_data[cs * i];
+ return csum_data.c_str() + (cs * i);
}
char *get_csum_item_ptr(unsigned i) {
size_t cs = get_csum_value_size();
- return &csum_data[cs * i];
+ return csum_data.c_str() + (cs * i);
}
void init_csum(unsigned type, unsigned order, unsigned len) {
csum_type = type;
csum_block_order = order;
- csum_data.resize(get_csum_value_size() * len / get_csum_block_size());
+ csum_data = buffer::create(get_csum_value_size() * len / get_csum_block_size());
+ csum_data.zero();
}
/// calculate csum for the buffer at the given b_off