ret = r;
goto done;
}
-
for (iter = m.begin(); iter != m.end(); ++iter) {
off_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);
while (i < fiemap->fm_mapped_extents) {
struct fiemap_extent *next = extent + 1;
+ dout(10) << "FileStore::fiemap() fm_mapped_extents=" << fiemap->fm_mapped_extents
+ << " fe_logical=" << extent->fe_logical << " fe_length=" << extent->fe_length << dendl;
+
/* try to merge extents */
while ((i < fiemap->fm_mapped_extents - 1) &&
(extent->fe_logical + extent->fe_length == next->fe_logical)) {
i++;
}
- if (extent->fe_logical + extent->fe_length > len)
- extent->fe_length = len - extent->fe_logical;
+ if (extent->fe_logical + extent->fe_length > offset + len)
+ extent->fe_length = offset + len - extent->fe_logical;
extmap[extent->fe_logical] = extent->fe_length;
i++;
}