]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: make fiemap return valid result beyond EOF
authorSage Weil <sage@redhat.com>
Fri, 8 Jan 2016 16:16:22 +0000 (11:16 -0500)
committerSage Weil <sage@redhat.com>
Fri, 8 Jan 2016 18:10:20 +0000 (13:10 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index ca833de1cf91cf8716e970ef60d515816d870796..915a9086dedba7d0fa8613fbe404778fc0ddc48f 100644 (file)
@@ -2464,22 +2464,22 @@ int BlueStore::fiemap(
   }
   _dump_onode(o);
 
+  dout(20) << __func__ << " " << offset << "~" << len << " size "
+          << o->onode.size << dendl;
+
+  map<uint64_t,bluestore_extent_t>::iterator bp, bend;
+  map<uint64_t,bluestore_overlay_t>::iterator op, oend;
+
   if (offset == len && offset == 0)
     len = o->onode.size;
 
   if (offset > o->onode.size)
-    return 0;
+    goto out;
 
   if (offset + len > o->onode.size) {
     len = o->onode.size - offset;
   }
 
-  dout(20) << __func__ << " " << offset << "~" << len << " size "
-          << o->onode.size << dendl;
-
-  map<uint64_t,bluestore_extent_t>::iterator bp, bend;
-  map<uint64_t,bluestore_overlay_t>::iterator op, oend;
-
   // loop over overlays and data fragments.  overlays take precedence.
   bend = o->onode.block_map.end();
   bp = o->onode.block_map.lower_bound(offset);
@@ -2542,6 +2542,7 @@ int BlueStore::fiemap(
     continue;
   }
 
+ out:
   ::encode(m, bl);
   dout(20) << __func__ << " " << offset << "~" << len
           << " size = 0 (" << m << ")" << dendl;