From 6fe8540b573419195c70dfeae1aefcfe247c046e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 25 Apr 2019 10:49:04 -0500 Subject: [PATCH] os/bluestore: correctly measure deferred writes into new blobs Writes into new blobs were all counted as write_small_new, but those can still be deferred later in _do_alloc_write if they are <= than the prefer_deferred setting. See http://tracker.ceph.com/issues/38816 Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 0821d3b5895..f4b9b26b030 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -11685,14 +11685,12 @@ void BlueStore::_do_write_small( } while (any_change); // new blob. - BlobRef b = c->new_blob(); uint64_t b_off = p2phase(offset, alloc_len); uint64_t b_off0 = b_off; _pad_zeros(&bl, &b_off0, block_size); o->extent_map.punch_hole(c, offset, length, &wctx->old_extents); wctx->write(offset, b, alloc_len, b_off0, bl, b_off, length, true, true); - logger->inc(l_bluestore_write_small_new); return; } @@ -12064,12 +12062,14 @@ int BlueStore::_do_alloc_write( }); ceph_assert(r == 0); op->data = *l; + logger->inc(l_bluestore_write_small_deferred); } else { b->get_blob().map_bl( b_off, *l, [&](uint64_t offset, bufferlist& t) { bdev->aio_write(offset, t, &txc->ioc, false); }); + logger->inc(l_bluestore_write_small_new); } } } -- 2.39.5