summaryrefslogtreecommitdiff
path: root/dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch')
-rw-r--r--dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch b/dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch
new file mode 100644
index 000000000000..e2a692cea50c
--- /dev/null
+++ b/dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch
@@ -0,0 +1,54 @@
+https://bugs.gentoo.org/891633
+https://github.com/facebook/folly/issues/1908
+https://github.com/facebook/folly/commit/259c9d6a4f0eb6d80e0263c2fe5d1af5bff116dc
+
+From 259c9d6a4f0eb6d80e0263c2fe5d1af5bff116dc Mon Sep 17 00:00:00 2001
+From: Dylan Yudaken <dylany@meta.com>
+Date: Mon, 16 Jan 2023 01:20:04 -0800
+Subject: [PATCH] io_uring: implement io_uring_enable_rings locally (#1915)
+
+Summary:
+Pull Request resolved: https://github.com/facebook/folly/pull/1915
+
+io_uring_enable_rings was missing from liburing upstream (see https://github.com/axboe/liburing/issues/773) which is breaking the open source build. See https://github.com/facebook/folly/issues/1908
+
+Instead just implement it locally, as it's trivial
+
+Reviewed By: dmm-fb
+
+Differential Revision: D42497664
+
+fbshipit-source-id: 7241785a36046e867f907bfe74623aaeb38c4b70
+--- a/folly/experimental/io/IoUringBackend.cpp
++++ b/folly/experimental/io/IoUringBackend.cpp
+@@ -56,6 +56,20 @@ namespace folly {
+
+ namespace {
+
++#if FOLLY_IO_URING_UP_TO_DATE
++int ioUringEnableRings(FOLLY_MAYBE_UNUSED struct io_uring* ring) {
++ // Ideally this would call ::io_uring_enable_rings directly which just runs
++ // the below however this was missing from a stable version of liburing, which
++ // means that some distributions were not able to compile it. see
++ // https://github.com/axboe/liburing/issues/773
++
++ // since it is so simple, just implement it here until the fix rolls out to an
++ // acceptable number of OSS distributions.
++ return ::io_uring_register(
++ ring->ring_fd, IORING_REGISTER_ENABLE_RINGS, nullptr, 0);
++}
++#endif
++
+ struct SignalRegistry {
+ struct SigInfo {
+ struct sigaction sa_ {};
+@@ -1360,7 +1374,7 @@ void IoUringBackend::delayedInit() {
+ if (usingDeferTaskrun_) {
+ // usingDeferTaskrun_ is guarded already on having an up to date liburing
+ #if FOLLY_IO_URING_UP_TO_DATE
+- int ret = ::io_uring_enable_rings(&ioRing_);
++ int ret = ioUringEnableRings(&ioRing_);
+ if (ret) {
+ LOG(ERROR) << "io_uring_enable_rings gave " << folly::errnoStr(-ret);
+ }
+