map<uint64_t, uint64_t> m;
map<uint64_t, uint64_t>::iterator iter;
- uint64_t bl_ofs = 0, buf_bl_pos = 0;
+ uint64_t bl_ofs = 0;
r = ictx->data_ctx.sparse_read(oid, m, bl, read_len, block_ofs);
if (r < 0 && r == -ENOENT)
r = 0;
uint64_t extent_ofs = iter->first;
size_t extent_len = iter->second;
/* a hole? */
- if (extent_ofs - block_ofs) {
- r = cb(total_read + buf_bl_pos, extent_ofs - block_ofs, NULL, arg);
+ if (extent_ofs - block_ofs > 0) {
+ r = cb(total_read + block_ofs, extent_ofs - block_ofs, NULL, arg);
if (r < 0)
return r;
}
if (bl_ofs + extent_len > bl.length())
return -EIO;
- buf_bl_pos += extent_ofs - block_ofs;
+
+ block_ofs = extent_ofs;
/* data */
- r = cb(total_read + buf_bl_pos, extent_len, bl.c_str() + bl_ofs, arg);
+ r = cb(total_read + block_ofs, extent_len, bl.c_str() + bl_ofs, arg);
if (r < 0)
return r;
bl_ofs += extent_len;
- buf_bl_pos += extent_len;
block_ofs += extent_len;
}
/* last hole */
- if (read_len - buf_bl_pos) {
- r = cb(total_read + buf_bl_pos, read_len - buf_bl_pos, NULL, arg);
+ if (read_len - block_ofs) {
+ r = cb(total_read + block_ofs, read_len - block_ofs, NULL, arg);
if (r < 0)
return r;
}