summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Krakow <hurikhan77+bgo@gmail.com>2019-11-28 12:23:02 +0100
committerJoonas Niilola <juippis@gentoo.org>2019-11-28 18:34:35 +0200
commitb2a8f934671d15ac008f42976e5c4de087e31607 (patch)
tree17af8c188571e8a73b247448881431b92785dd14 /sys-fs/bees/files
parentsys-fs/bees: Adjust 9999 to upstream changes (diff)
downloadgentoo-b2a8f934671d15ac008f42976e5c4de087e31607.tar.gz
gentoo-b2a8f934671d15ac008f42976e5c4de087e31607.tar.bz2
gentoo-b2a8f934671d15ac008f42976e5c4de087e31607.zip
sys-fs/bees: Bump to v0.6.1-r1
Closes: https://bugs.gentoo.org/685714 Package-Manager: Portage-2.3.76, Repoman-2.3.16 Signed-off-by: Kai Krakow <hurikhan77+bgo@gmail.com> Signed-off-by: Joonas Niilola <juippis@gentoo.org>
Diffstat (limited to 'sys-fs/bees/files')
-rw-r--r--sys-fs/bees/files/6001-lib-fix-non-local-lambda-expression-cannot-have-a-ca.patch38
-rw-r--r--sys-fs/bees/files/6002-context-workaround-to-prevent-LOGICAL_INO-and-btrfs-.patch95
2 files changed, 133 insertions, 0 deletions
diff --git a/sys-fs/bees/files/6001-lib-fix-non-local-lambda-expression-cannot-have-a-ca.patch b/sys-fs/bees/files/6001-lib-fix-non-local-lambda-expression-cannot-have-a-ca.patch
new file mode 100644
index 000000000000..60ab748eb2b6
--- /dev/null
+++ b/sys-fs/bees/files/6001-lib-fix-non-local-lambda-expression-cannot-have-a-ca.patch
@@ -0,0 +1,38 @@
+From 566df54a3f7458559b75455a95b1991b515ba6bf Mon Sep 17 00:00:00 2001
+From: Zygo Blaxell <zblaxell@thirteen.furryterror.org>
+Date: Wed, 12 Jun 2019 21:27:50 -0400
+Subject: [PATCH 1/2] lib: fix non-local lambda expression cannot have a
+ capture-default
+
+We got away with this because GCC 4.8 (and apparently every GCC prior
+to 9) didn't notice or care, and because there is nothing referenced
+inside the lambda function body that isn't accessible from any other
+kind of function body (i.e. the capture wasn't needed at all).
+
+GCC 9 now enforces what the C++ standard said all along: there is
+no need to allow capture-default in this case, so it is not.
+
+Fix by removing the offending capture-default.
+
+Fixes: https://github.com/Zygo/bees/issues/112
+Signed-off-by: Zygo Blaxell <bees@furryterror.org>
+---
+ lib/error.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/error.cc b/lib/error.cc
+index f2a6db0..1d16a0a 100644
+--- a/lib/error.cc
++++ b/lib/error.cc
+@@ -32,7 +32,7 @@ namespace crucible {
+
+ // FIXME: could probably avoid some of these levels of indirection
+ static
+- function<void(string s)> current_catch_explainer = [&](string s) {
++ function<void(string s)> current_catch_explainer = [](string s) {
+ cerr << s << endl;
+ };
+
+--
+2.23.0
+
diff --git a/sys-fs/bees/files/6002-context-workaround-to-prevent-LOGICAL_INO-and-btrfs-.patch b/sys-fs/bees/files/6002-context-workaround-to-prevent-LOGICAL_INO-and-btrfs-.patch
new file mode 100644
index 000000000000..6d8d2ea530d5
--- /dev/null
+++ b/sys-fs/bees/files/6002-context-workaround-to-prevent-LOGICAL_INO-and-btrfs-.patch
@@ -0,0 +1,95 @@
+From f731ea8016c570243c783adef96681b535d9c927 Mon Sep 17 00:00:00 2001
+From: Zygo Blaxell <bees@furryterror.org>
+Date: Tue, 19 Nov 2019 16:01:31 -0500
+Subject: [PATCH 2/2] context: workaround to prevent LOGICAL_INO and btrfs
+ balance from running concurrently
+
+This avoids some kernel bugs. One of them is fixed in 5.3.4 and later:
+
+ efad8a853a "Btrfs: fix use-after-free when using the tree modification log"
+
+There are apparently others in current kernels, so for now just put bees
+on pause until the balance is done.
+
+At some point we may want to provide an option to disable this
+workaround; however, running bees and balance at the same time makes
+neither particularly fast, so maybe we'll just leave it this way.
+
+Signed-off-by: Zygo Blaxell <bees@furryterror.org>
+---
+ src/bees-context.cc | 31 +++++++++++++++++++++++++++++++
+ src/bees.h | 4 ++++
+ 2 files changed, 35 insertions(+)
+
+diff --git a/src/bees-context.cc b/src/bees-context.cc
+index 4e0a43e..0665019 100644
+--- a/src/bees-context.cc
++++ b/src/bees-context.cc
+@@ -760,11 +760,42 @@ BeesResolveAddrResult::BeesResolveAddrResult()
+ {
+ }
+
++void
++BeesContext::wait_for_balance()
++{
++ Timer balance_timer;
++ BEESNOTE("WORKAROUND: waiting for balance to stop");
++ while (true) {
++ btrfs_ioctl_balance_args args;
++ memset_zero<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");
++ sleep(BEES_BALANCE_POLL_INTERVAL);
++ }
++}
++
+ BeesResolveAddrResult
+ BeesContext::resolve_addr_uncached(BeesAddress addr)
+ {
+ THROW_CHECK1(invalid_argument, addr, !addr.is_magic());
+ THROW_CHECK0(invalid_argument, !!root_fd());
++
++ // Is there a bug where resolve and balance cause a crash (BUG_ON at fs/btrfs/ctree.c:1227)?
++ // Apparently yes, and more than one.
++ // Wait for the balance to finish before we run LOGICAL_INO
++ wait_for_balance();
++
++ // Time how long this takes
+ Timer resolve_timer;
+
+ // There is no performance benefit if we restrict the buffer size.
+diff --git a/src/bees.h b/src/bees.h
+index da87d88..5c9375c 100644
+--- a/src/bees.h
++++ b/src/bees.h
+@@ -114,6 +114,9 @@ const size_t BEES_TRANSID_FACTOR = 10;
+ // The actual limit in LOGICAL_INO seems to be 2730, but let's leave a little headroom
+ const size_t BEES_MAX_EXTENT_REF_COUNT = 2560;
+
++// Wait this long for a balance to stop
++const double BEES_BALANCE_POLL_INTERVAL = 60.0;
++
+ // Flags
+ const int FLAGS_OPEN_COMMON = O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC | O_NOATIME | O_LARGEFILE | O_NOCTTY;
+ const int FLAGS_OPEN_DIR = FLAGS_OPEN_COMMON | O_RDONLY | O_DIRECTORY;
+@@ -708,6 +711,7 @@ class BeesContext : public enable_shared_from_this<BeesContext> {
+ 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);
+--
+2.23.0
+