Messages in this thread | | | From | David Howells <> | Subject | Re: [RFC PATCH 04/14] pipe: Add O_NOTIFICATION_PIPE [ver #2] | Date | Fri, 08 Nov 2019 06:42:50 +0000 |
| |
Andy Lutomirski <luto@kernel.org> wrote:
> I can open a normal pipe from userspace (with pipe() or pipe2()), and > I can have two threads. One thread writes to the pipe with write(). > The other thread writes with splice(). Everything works fine.
Yes. Every operation you do on a pipe from userspace is serialised with the pipe mutex - and both ends share the same pipe.
> What's special about notifications?
The post_notification() cannot take the pipe mutex. It has to be callable from softirq context. Linus's idea is that when you're actually altering the ring pointers you should hold the wake-queue spinlock, and post_notification() holds the wake queue spinlock for the duration of the operation.
This means that post_notification() can be writing to the pipe whilst a userspace-invoked operation is holding the pipe mutex and is also doing something to the ring.
David
| |