You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-cpp/folly/files/folly-2023.01.16.00-liburin...

55 lines
2.0 KiB

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