From af755be94101569227e6bfee3ea5fe2d1061fb02 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 9 Feb 2011 16:19:37 -0800 Subject: [PATCH] filestore: fix fiemap --- src/librbd.cc | 2 -- src/os/FileStore.cc | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/librbd.cc b/src/librbd.cc index fc7dd3709e926..ca06939ccddf5 100644 --- a/src/librbd.cc +++ b/src/librbd.cc @@ -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); diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 635c04f4b9f92..82761e420428e 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -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++; } -- 2.39.5