From bfe0d55c8f734e985046a02fb2126bf601b1a353 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Tue, 21 Jun 2011 22:40:28 -0700 Subject: [PATCH] librbd: sparse read cleanup, fixes --- src/librbd.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/librbd.cc b/src/librbd.cc index d70c3a0b8d2e7..82935dab241ba 100644 --- a/src/librbd.cc +++ b/src/librbd.cc @@ -1126,6 +1126,7 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len, uint64_t start_block = get_block_num(ictx->header, off); uint64_t end_block = get_block_num(ictx->header, off + len); uint64_t block_size = get_block_size(ictx->header); + uint64_t base = off - get_block_ofs(ictx->header, off); ictx->lock.Unlock(); uint64_t left = len; @@ -1150,9 +1151,10 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len, for (iter = m.begin(); iter != m.end(); ++iter) { uint64_t extent_ofs = iter->first; size_t extent_len = iter->second; +dout(0) << "extent_ofs=" << extent_ofs << " extent_len=" << extent_len << dendl; /* a hole? */ if (extent_ofs - block_ofs > 0) { - r = cb(total_read + block_ofs, extent_ofs - block_ofs, NULL, arg); + r = cb(base + total_read + block_ofs, extent_ofs - block_ofs, NULL, arg); if (r < 0) return r; } @@ -1163,7 +1165,7 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len, block_ofs = extent_ofs; /* data */ - r = cb(total_read + block_ofs, extent_len, bl.c_str() + bl_ofs, arg); + r = cb(base + total_read + block_ofs, extent_len, bl.c_str() + bl_ofs, arg); if (r < 0) return r; bl_ofs += extent_len; @@ -1172,7 +1174,7 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len, /* last hole */ if (read_len - block_ofs) { - r = cb(total_read + block_ofs, read_len - block_ofs, NULL, arg); + r = cb(base + total_read + block_ofs, read_len - block_ofs, NULL, arg); if (r < 0) return r; } -- 2.39.5