From 9cdeb608f57fadbc678e34e78932918ca5f907e8 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Sat, 19 Nov 2022 02:00:17 -0500 Subject: [PATCH] bees: drop the balance/logical workaround that has been disabled for two years Kernels that needed the balance workaround frankly are too buggy to run bees at all. The workaround also makes the locking stories around logical_ino calls and process exit complicated, so get rid of it completely. Signed-off-by: Zygo Blaxell --- docs/btrfs-kernel.md | 10 ---------- src/bees-context.cc | 30 ------------------------------ src/bees.h | 7 ------- 3 files changed, 47 deletions(-) diff --git a/docs/btrfs-kernel.md b/docs/btrfs-kernel.md index 29cdae5..eb46cbd 100644 --- a/docs/btrfs-kernel.md +++ b/docs/btrfs-kernel.md @@ -96,16 +96,6 @@ Workarounds for known kernel bugs at the same time can lead to a kernel hang. The workaround is to reduce the thread count to 1 with `-c1`. -* **Tree mod log issues**: bees will detect that a btrfs balance is - running, and pause bees activity until the balance is done. This avoids - running both the `LOGICAL_INO` ioctl and btrfs balance at the same time, - which avoids kernel crashes on old kernel versions. - - The numbers for "tree mod log issue #" in the above table are arbitrary. - There are a lot of them, and they all behave fairly similarly. - - This workaround is less necessary for kernels 5.4.19 and later. - * **Slow backrefs** (aka toxic extents): Under certain conditions, if the number of references to a single shared extent grows too high, the kernel consumes more and more CPU while also holding locks diff --git a/src/bees-context.cc b/src/bees-context.cc index 04fadff..c49a903 100644 --- a/src/bees-context.cc +++ b/src/bees-context.cc @@ -752,33 +752,6 @@ BeesResolveAddrResult::BeesResolveAddrResult() { } -void -BeesContext::wait_for_balance() -{ - if (!BEES_SERIALIZE_BALANCE) { - return; - } - - Timer balance_timer; - BEESNOTE("WORKAROUND: waiting for balance to stop"); - while (true) { - btrfs_ioctl_balance_args args {}; - const int ret = ioctl(root_fd(), BTRFS_IOC_BALANCE_PROGRESS, &args); - if (ret < 0) { - // Either can't get balance status or not running, exit either way - break; - } - - if (!(args.state & BTRFS_BALANCE_STATE_RUNNING)) { - // Balance not running, doesn't matter if paused or cancelled - break; - } - - BEESLOGDEBUG("WORKAROUND: Waiting " << balance_timer << "s for balance to stop"); - nanosleep(BEES_BALANCE_POLL_INTERVAL); - } -} - BeesResolveAddrResult BeesContext::resolve_addr_uncached(BeesAddress addr) { @@ -790,9 +763,6 @@ BeesContext::resolve_addr_uncached(BeesAddress addr) // transaction latency, competing threads, and freeze/SIGSTOP // pausing the bees process. - // Wait for the balance to finish before we run LOGICAL_INO - wait_for_balance(); - BtrfsIoctlLogicalInoArgs log_ino(addr.get_physical_or_zero()); // Time how long this takes diff --git a/src/bees.h b/src/bees.h index b300621..e411c8d 100644 --- a/src/bees.h +++ b/src/bees.h @@ -108,12 +108,6 @@ const size_t BEES_MAX_CRAWL_BATCH = 128; // Wait this many transids between crawls const size_t BEES_TRANSID_FACTOR = 10; -// Wait this long for a balance to stop -const double BEES_BALANCE_POLL_INTERVAL = 60.0; - -// Workaround for tree mod log bugs -const bool BEES_SERIALIZE_BALANCE = false; - // Workaround for silly dedupe / ineffective readahead behavior const size_t BEES_READAHEAD_SIZE = 1024 * 1024; @@ -753,7 +747,6 @@ class BeesContext : public enable_shared_from_this { void set_root_fd(Fd fd); BeesResolveAddrResult resolve_addr_uncached(BeesAddress addr); - void wait_for_balance(); BeesFileRange scan_one_extent(const BeesFileRange &bfr, const Extent &e); void rewrite_file_range(const BeesFileRange &bfr);