From 5534d2b566ef2bf007878afb0cede1d506d7c10d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 22 Dec 2015 14:02:05 -0500 Subject: [PATCH] os/bluestore/BlueStore: fsck_on_umount Signed-off-by: Sage Weil --- src/common/config_opts.h | 1 + src/os/bluestore/BlueStore.cc | 10 ++++++++++ src/test/objectstore/store_test.cc | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index a667430050edb..e4721d2c21b6b 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -867,6 +867,7 @@ OPTION(bluestore_cache_tails, OPT_BOOL, true) // cache tail blocks in Onode OPTION(bluestore_backend, OPT_STR, "rocksdb") OPTION(bluestore_rocksdb_options, OPT_STR, "compression=kNoCompression,max_write_buffer_number=16,min_write_buffer_number_to_merge=3,recycle_log_file_num=16") OPTION(bluestore_fsck_on_mount, OPT_BOOL, false) +OPTION(bluestore_fsck_on_umount, OPT_BOOL, false) OPTION(bluestore_fail_eio, OPT_BOOL, true) OPTION(bluestore_sync_io, OPT_BOOL, false) // perform initial io synchronously OPTION(bluestore_sync_transaction, OPT_BOOL, false) // perform kv txn synchronously diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index db2f3180a8b02..8ff93dd799abe 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1739,6 +1739,16 @@ int BlueStore::umount() _close_bdev(); _close_fsid(); _close_path(); + + if (g_conf->bluestore_fsck_on_umount) { + int rc = fsck(); + if (rc < 0) + return rc; + if (rc > 0) { + derr << __func__ << " fsck found " << rc << " errors" << dendl; + return -EIO; + } + } return 0; } diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 1341d04ae210a..8727d817c82ac 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -3190,6 +3190,8 @@ int main(int argc, char **argv) { g_ceph_context->_conf->set_val("filestore_op_thread_suicide_timeout", "10000"); g_ceph_context->_conf->set_val("filestore_debug_disable_sharded_check", "true"); g_ceph_context->_conf->set_val("filestore_fiemap", "true"); + g_ceph_context->_conf->set_val("bluestore_fsck_on_mount", "true"); + g_ceph_context->_conf->set_val("bluestore_fsck_on_umount", "true"); g_ceph_context->_conf->set_val( "enable_experimental_unrecoverable_data_corrupting_features", "*"); g_ceph_context->_conf->apply_changes(NULL); -- 2.39.5