]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fix and cleanup a bit read_iterate
authorYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 21 Jun 2011 23:31:44 +0000 (16:31 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 22 Jun 2011 05:45:11 +0000 (22:45 -0700)
src/librbd.cc

index 061b4c68585b05a41cfb86ed267fd20830bdc49f..4a1e6719dfbc84261c43774230433836bde59873 100644 (file)
@@ -1126,7 +1126,7 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len,
 
     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;
@@ -1138,28 +1138,28 @@ int64_t read_iterate(ImageCtx *ictx, uint64_t off, size_t len,
       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;
     }