]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: ignore invalid extents during commit
authorSamuel Just <sjust@redhat.com>
Mon, 13 Jul 2020 22:46:27 +0000 (15:46 -0700)
committerSamuel Just <sjust@redhat.com>
Thu, 16 Jul 2020 23:16:42 +0000 (16:16 -0700)
This happens when a transaction mutates and then retires an
extent.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/cache.cc

index 649eb9c8d088ce338c2996635dbac4a778a74e47..9f2b2c84bd466f36416e842ea9487179607d2ffb 100644 (file)
@@ -117,6 +117,10 @@ std::optional<record_t> Cache::try_construct_record(Transaction &t)
   // Add new copy of mutated blocks, set_io_wait to block until written
   record.deltas.reserve(t.mutated_block_list.size());
   for (auto &i: t.mutated_block_list) {
+    if (!i->is_valid()) {
+      logger().debug("try_construct_record: ignoring invalid {}", *i);
+      continue;
+    }
     logger().debug("try_construct_record: mutating {}", *i);
     add_extent(i);
     i->prepare_write();
@@ -188,12 +192,20 @@ void Cache::complete_commit(
 
   // Add new copy of mutated blocks, set_io_wait to block until written
   for (auto &i: t.mutated_block_list) {
+    if (!i->is_valid()) {
+      logger().debug("complete_commit: ignoring invalid {}", *i);
+      continue;
+    }
     i->state = CachedExtent::extent_state_t::DIRTY;
     logger().debug("complete_commit: mutated {}", *i);
     i->on_delta_write(final_block_start);
   }
 
   for (auto &i: t.mutated_block_list) {
+    if (!i->is_valid()) {
+      logger().debug("complete_commit: ignoring invalid {}", *i);
+      continue;
+    }
     i->complete_io();
   }
 }