]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: debug_omit_block_device_write isn't always respected. 24545/head
authorIgor Fedotov <ifedotov@suse.com>
Thu, 11 Oct 2018 15:28:10 +0000 (18:28 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 11 Oct 2018 15:28:10 +0000 (18:28 +0300)
This might lead to leaks in throttle_deferred_bytes and finally in stuck
a store (Valid for bluestore_debug_omit_block_device_write=true only).

Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc

index fa1aa01b4238ac7e8394f15759007a8346d7c3f3..51123a1bcea5f9d75062f76daaa91391bdd4533b 100644 (file)
@@ -10562,25 +10562,29 @@ void BlueStore::_do_write_small(
          }
          logger->inc(l_bluestore_write_small_pre_read);
 
-         bluestore_deferred_op_t *op = _get_deferred_op(txc, o);
-         op->op = bluestore_deferred_op_t::OP_WRITE;
          _buffer_cache_write(txc, b, b_off, bl,
                              wctx->buffered ? 0 : Buffer::FLAG_NOCACHE);
 
-         int r = b->get_blob().map(
-           b_off, b_len,
-           [&](uint64_t offset, uint64_t length) {
-             op->extents.emplace_back(bluestore_pextent_t(offset, length));
-             return 0;
-           });
-         ceph_assert(r == 0);
          if (b->get_blob().csum_type) {
            b->dirty_blob().calc_csum(b_off, bl);
          }
-         op->data.claim(bl);
-         dout(20) << __func__ << "  deferred write 0x" << std::hex << b_off << "~"
-                  << b_len << std::dec << " of mutable " << *b
-                  << " at " << op->extents << dendl;
+
+         if (!g_conf()->bluestore_debug_omit_block_device_write) {
+           bluestore_deferred_op_t *op = _get_deferred_op(txc, o);
+           op->op = bluestore_deferred_op_t::OP_WRITE;
+           int r = b->get_blob().map(
+             b_off, b_len,
+             [&](uint64_t offset, uint64_t length) {
+               op->extents.emplace_back(bluestore_pextent_t(offset, length));
+               return 0;
+             });
+           ceph_assert(r == 0);
+           op->data.claim(bl);
+           dout(20) << __func__ << "  deferred write 0x" << std::hex << b_off << "~"
+                    << b_len << std::dec << " of mutable " << *b
+                    << " at " << op->extents << dendl;
+         }
+
          Extent *le = o->extent_map.set_lextent(c, offset, offset - bstart, length,
                                                 b, &wctx->old_extents);
          b->dirty_blob().mark_used(le->blob_offset, le->length);