]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: ExtentMap: put un-spanning in normal loop
authorSage Weil <sage@redhat.com>
Fri, 27 Jan 2017 21:45:50 +0000 (16:45 -0500)
committerSage Weil <sage@redhat.com>
Thu, 2 Feb 2017 15:12:08 +0000 (10:12 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index 6162a7e2ae8d1211f3fcf86076686dcede10e32f..6eedbce2b69936a8f371fa2fbe2a45eaa6e90124 100644 (file)
@@ -1876,14 +1876,6 @@ void BlueStore::ExtentMap::reshard(
       );
   }
 
-  // un-span all blobs
-  auto p = spanning_blob_map.begin();
-  while (p != spanning_blob_map.end()) {
-    p->second->id = -1;
-    dout(30) << __func__ << " un-spanning " << *p->second << dendl;
-    p = spanning_blob_map.erase(p);
-  }
-
   unsigned bytes = 0;
   if (onode->onode.extent_map_shards.empty()) {
     bytes = inline_bl.length();
@@ -1906,7 +1898,14 @@ void BlueStore::ExtentMap::reshard(
   unsigned max_blob_end = 0;
   for (auto& e: extent_map) {
     dout(30) << " extent " << e << dendl;
-    assert(!e.blob->is_spanning());
+
+    // unspan spanning blobs
+    if (e.blob->is_spanning()) {
+      spanning_blob_map.erase(e.blob->id);
+      e.blob->id = -1;
+      dout(30) << __func__ << " un-spanning " << *e.blob << dendl;
+    }
+
     // disfavor shard boundaries that span a blob
     bool would_span = (e.logical_offset < max_blob_end) || e.blob_offset;
     if (estimate &&