]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: fix fiemap
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Thu, 10 Feb 2011 00:19:37 +0000 (16:19 -0800)
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Thu, 10 Feb 2011 00:19:37 +0000 (16:19 -0800)
src/librbd.cc
src/os/FileStore.cc

index fc7dd3709e9264b844dbf8183fe1254db868eb5f..ca06939ccddf5b1b0c00f8c52eeb19a748362707 100644 (file)
@@ -1142,11 +1142,9 @@ int librbd::RBDClient::read_iterate(PoolCtx *ctx, ImageCtx *ictx, off_t off, siz
       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);
index 635c04f4b9f92111854d0bc246f57243a82f504c..82761e420428e7ebeadad345aaff31ee18b3efaa 100644 (file)
@@ -2124,6 +2124,9 @@ int FileStore::fiemap(coll_t cid, const sobject_t& oid,
     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)) {
@@ -2134,8 +2137,8 @@ int FileStore::fiemap(coll_t cid, const sobject_t& oid,
           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++;
     }