From 32c6ba129d289ca9b56ecb0ea1ca7d74a2506836 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 20 May 2016 14:23:55 -0400 Subject: [PATCH] os/bluestore: fix up _set_csum helper - make it thread-safe - call during mount Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 23 +++++++++++++++-------- src/os/bluestore/BlueStore.h | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 15cac81c050f3..c78279c5c4b56 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -800,17 +800,23 @@ void BlueStore::handle_conf_change(const struct md_config_t *conf, { if (changed.count("bluestore_csum_type") || changed.count("bluestore_csum")) { - csum_type = bluestore_blob_t::get_csum_string_type( - conf->bluestore_csum_type); - if (csum_type < 0 || !conf->bluestore_csum) { - csum_type = bluestore_blob_t::CSUM_NONE; - } - dout(10) << __func__ << " csum_type " - << bluestore_blob_t::get_csum_type_string(csum_type) - << dendl; + _set_csum(); } } +void BlueStore::_set_csum() +{ + int t = bluestore_blob_t::get_csum_string_type( + g_conf->bluestore_csum_type); + if (t < 0 || !g_conf->bluestore_csum) { + t = bluestore_blob_t::CSUM_NONE; + } + csum_type = t; + dout(10) << __func__ << " csum_type " + << bluestore_blob_t::get_csum_type_string(csum_type) + << dendl; +} + void BlueStore::_init_logger() { PerfCountersBuilder b(g_ceph_context, "BlueStore", @@ -2020,6 +2026,7 @@ int BlueStore::mount() if (r < 0) goto out_stop; + _set_csum(); mounted = true; return 0; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 0525e2ac2b517..27ad14485711e 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -68,6 +68,7 @@ public: virtual void handle_conf_change(const struct md_config_t *conf, const std::set &changed) override; + void _set_csum(); class TransContext; -- 2.39.5