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