From: Greg Kroah-Hartman Date: Wed, 28 Dec 2022 14:20:15 +0000 (+0100) Subject: drop 4464853277d0ccdb9914608dd1332f0fa2f9846f from 6.1 X-Git-Tag: v5.15.86~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=996e87b26af6eb144bb6be17488170b09911a58a;p=thirdparty%2Fkernel%2Fstable-queue.git drop 4464853277d0ccdb9914608dd1332f0fa2f9846f from 6.1 broke the build :( --- diff --git a/queue-6.1/io_uring-pass-in-epoll_uring_wake-for-eventfd-signaling-and-wakeups.patch b/queue-6.1/io_uring-pass-in-epoll_uring_wake-for-eventfd-signaling-and-wakeups.patch deleted file mode 100644 index 8ef81bd04c5..00000000000 --- a/queue-6.1/io_uring-pass-in-epoll_uring_wake-for-eventfd-signaling-and-wakeups.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 4464853277d0ccdb9914608dd1332f0fa2f9846f Mon Sep 17 00:00:00 2001 -From: Jens Axboe -Date: Sun, 20 Nov 2022 10:18:45 -0700 -Subject: io_uring: pass in EPOLL_URING_WAKE for eventfd signaling and wakeups - -From: Jens Axboe - -commit 4464853277d0ccdb9914608dd1332f0fa2f9846f upstream. - -Pass in EPOLL_URING_WAKE when signaling eventfd or doing poll related -wakups, so that we can check for a circular event dependency between -eventfd and epoll. If this flag is set when our wakeup handlers are -called, then we know we have a dependency that needs to terminate -multishot requests. - -eventfd and epoll are the only such possible dependencies. - -Cc: stable@vger.kernel.org # 6.0 -Signed-off-by: Jens Axboe -Signed-off-by: Greg Kroah-Hartman ---- - io_uring/io_uring.c | 4 ++-- - io_uring/io_uring.h | 15 +++++++++++---- - io_uring/poll.c | 8 ++++++++ - 3 files changed, 21 insertions(+), 6 deletions(-) - ---- a/io_uring/io_uring.c -+++ b/io_uring/io_uring.c -@@ -495,7 +495,7 @@ static void io_eventfd_ops(struct rcu_he - int ops = atomic_xchg(&ev_fd->ops, 0); - - if (ops & BIT(IO_EVENTFD_OP_SIGNAL_BIT)) -- eventfd_signal(ev_fd->cq_ev_fd, 1); -+ eventfd_signal_mask(ev_fd->cq_ev_fd, 1, EPOLL_URING_WAKE); - - /* IO_EVENTFD_OP_FREE_BIT may not be set here depending on callback - * ordering in a race but if references are 0 we know we have to free -@@ -531,7 +531,7 @@ static void io_eventfd_signal(struct io_ - goto out; - - if (likely(eventfd_signal_allowed())) { -- eventfd_signal(ev_fd->cq_ev_fd, 1); -+ eventfd_signal_mask(ev_fd->cq_ev_fd, 1, EPOLL_URING_WAKE); - } else { - atomic_inc(&ev_fd->refs); - if (!atomic_fetch_or(BIT(IO_EVENTFD_OP_SIGNAL_BIT), &ev_fd->ops)) ---- a/io_uring/io_uring.h -+++ b/io_uring/io_uring.h -@@ -4,6 +4,7 @@ - #include - #include - #include -+#include - #include "io-wq.h" - #include "slist.h" - #include "filetable.h" -@@ -207,12 +208,18 @@ static inline void io_commit_cqring(stru - static inline void __io_cqring_wake(struct io_ring_ctx *ctx) - { - /* -- * wake_up_all() may seem excessive, but io_wake_function() and -- * io_should_wake() handle the termination of the loop and only -- * wake as many waiters as we need to. -+ * Trigger waitqueue handler on all waiters on our waitqueue. This -+ * won't necessarily wake up all the tasks, io_should_wake() will make -+ * that decision. -+ * -+ * Pass in EPOLLIN|EPOLL_URING_WAKE as the poll wakeup key. The latter -+ * set in the mask so that if we recurse back into our own poll -+ * waitqueue handlers, we know we have a dependency between eventfd or -+ * epoll and should terminate multishot poll at that point. - */ - if (waitqueue_active(&ctx->cq_wait)) -- wake_up_all(&ctx->cq_wait); -+ __wake_up(&ctx->cq_wait, TASK_NORMAL, 0, -+ poll_to_key(EPOLL_URING_WAKE | EPOLLIN)); - } - - static inline void io_cqring_wake(struct io_ring_ctx *ctx) ---- a/io_uring/poll.c -+++ b/io_uring/poll.c -@@ -429,6 +429,14 @@ static int io_poll_wake(struct wait_queu - return 0; - - if (io_poll_get_ownership(req)) { -+ /* -+ * If we trigger a multishot poll off our own wakeup path, -+ * disable multishot as there is a circular dependency between -+ * CQ posting and triggering the event. -+ */ -+ if (mask & EPOLL_URING_WAKE) -+ poll->events |= EPOLLONESHOT; -+ - /* optional, saves extra locking for removal in tw handler */ - if (mask && poll->events & EPOLLONESHOT) { - list_del_init(&poll->wait.entry); diff --git a/queue-6.1/series b/queue-6.1/series index e9474cb07e7..b247b7b3d49 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -1135,7 +1135,6 @@ mm-gup-disallow-foll_force-foll_write-on-hugetlb-mappings.patch scsi-qla2xxx-fix-crash-when-i-o-abort-times-out.patch blk-iolatency-fix-memory-leak-on-add_disk-failures.patch io_uring-net-introduce-ioring_send_zc_report_usage-flag.patch -io_uring-pass-in-epoll_uring_wake-for-eventfd-signaling-and-wakeups.patch io_uring-add-completion-locking-for-iopoll.patch io_uring-dont-remove-file-from-msg_ring-reqs.patch io_uring-improve-io_double_lock_ctx-fail-handling.patch