From a3c0ba0d6922340b490b4b88c7b5cf7cc3ce52cb Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Sun, 2 Feb 2025 12:25:50 -0500 Subject: [PATCH] fs: add a runtime debug stream for btrfs tree searches This allows plugging in an ostream at run time so that we can audit all the search calls we are doing. Signed-off-by: Zygo Blaxell --- include/crucible/fs.h | 1 + lib/fs.cc | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/crucible/fs.h b/include/crucible/fs.h index 9c843d8..8dfdf92 100644 --- a/include/crucible/fs.h +++ b/include/crucible/fs.h @@ -201,6 +201,7 @@ namespace crucible { static thread_local size_t s_calls; static thread_local size_t s_loops; static thread_local size_t s_loops_empty; + static thread_local shared_ptr s_debug_ostream; }; ostream & operator<<(ostream &os, const btrfs_ioctl_search_key &key); diff --git a/lib/fs.cc b/lib/fs.cc index dc20318..25443c8 100644 --- a/lib/fs.cc +++ b/lib/fs.cc @@ -757,6 +757,7 @@ namespace crucible { thread_local size_t BtrfsIoctlSearchKey::s_calls = 0; thread_local size_t BtrfsIoctlSearchKey::s_loops = 0; thread_local size_t BtrfsIoctlSearchKey::s_loops_empty = 0; + thread_local shared_ptr BtrfsIoctlSearchKey::s_debug_ostream; bool BtrfsIoctlSearchKey::do_ioctl_nothrow(int fd) @@ -776,6 +777,9 @@ namespace crucible { ioctl_ptr = ioctl_arg.get(); ioctl_ptr->key = static_cast(*this); ioctl_ptr->buf_size = buf_size; + if (s_debug_ostream) { + (*s_debug_ostream) << "bisk " << (ioctl_ptr->key) << "\n"; + } // Don't bother supporting V1. Kernels that old have other problems. int rv = ioctl(fd, BTRFS_IOC_TREE_SEARCH_V2, ioctl_arg.data()); ++s_calls;