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);