summaryrefslogtreecommitdiff
path: root/dev-cpp/folly/files/folly-2023.01.16.00-liburing.patch
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);
     }