]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs/pipe: remove unnecessary spinlock from pipe_write()
authorMax Kellermann <max.kellermann@ionos.com>
Thu, 21 Sep 2023 07:57:54 +0000 (09:57 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 19 Oct 2023 09:02:47 +0000 (11:02 +0200)
This reverts commit 8df441294dd3 ("pipe: Check for ring full inside of
the spinlock in pipe_write()") which was obsoleted by commit
c73be61cede ("pipe: Add general notification queue support") because
now pipe_write() fails early with -EXDEV if there is a watch_queue.

Without a watch_queue, no notifications can be posted to the pipe and
mutex protection is enough, as can be seen in splice_pipe_to_pipe()
which does not use the spinlock either.

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Message-Id: <20230921075755.1378787-3-max.kellermann@ionos.com>
Reviewed-by: David Howells <dhowells@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/pipe.c

index 6ecaccb487388d2925884df9e248cc6989262d81..939def02c18cc88c9a7c311ca7161861b33d7f0a 100644 (file)
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -505,16 +505,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
                         * it, either the reader will consume it or it'll still
                         * be there for the next write.
                         */
-                       spin_lock_irq(&pipe->rd_wait.lock);
-
-                       head = pipe->head;
-                       if (pipe_full(head, pipe->tail, pipe->max_usage)) {
-                               spin_unlock_irq(&pipe->rd_wait.lock);
-                               continue;
-                       }
-
                        pipe->head = head + 1;
-                       spin_unlock_irq(&pipe->rd_wait.lock);
 
                        /* Insert it into the buffer array */
                        buf = &pipe->bufs[head & mask];