[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230921075755.1378787-3-max.kellermann@ionos.com>
Date: Thu, 21 Sep 2023 09:57:54 +0200
From: Max Kellermann <max.kellermann@...os.com>
To: viro@...iv.linux.org.uk, brauner@...nel.org, howells@...hat.com
Cc: linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
Max Kellermann <max.kellermann@...os.com>
Subject: [PATCH 3/4] fs/pipe: remove unnecessary spinlock from pipe_write()
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@...os.com>
---
fs/pipe.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/fs/pipe.c b/fs/pipe.c
index 6ecaccb48738..939def02c18c 100644
--- 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];
--
2.39.2
Powered by blists - more mailing lists