blob: e2a692cea50cbc669c9acb8f8e16da6dcbea1f9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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);
}
|