From: Zygo Blaxell Date: Sun, 2 Feb 2025 17:25:50 +0000 (-0500) Subject: fs: add a runtime debug stream for btrfs tree searches X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3c0ba0d6922340b490b4b88c7b5cf7cc3ce52cb;p=bees 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 --- diff --git a/include/crucible/fs.h b/include/crucible/fs.h index 9c843d8f..8dfdf921 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 dc203187..25443c8d 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;