Re: [RFC PATCH 11/10] pipe: Add fsync() support [ver #2]

From: Andy Lutomirski
Date: Sat Nov 02 2019 - 16:31:20 EST




> On Nov 2, 2019, at 12:34 PM, David Howells <dhowells@xxxxxxxxxx> wrote:
>
> ïLinus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
>
>>>> Similar synchronization is required for reusing memory after vmsplice()?
>>>> I don't see other way how sender could safely change these pages.
>
> Actually, it's probably worse than that. If the output of the pipe gets teed
> or spliced somewhere else, you still don't know when the vmspliced pages are
> finished with.
>
>

I sometimes wonder whether vmsplice should be disallowed or severely restricted. Even ignoring these usability issues, it makes me very uncomfortable that you can have some data queue up on a pipe, tee() it, and get *different* data in the original pipe and the teed copy because the sender used vmsplice and is messing with you.

Add in the fact that itâs not obvious that vmsplice *can* be used correctly, and Iâm wondering if we should just remove it or make it just do write() under the hood.

I suppose the kernel could guarantee that it stops referring to the vmsplice source pages as soon as anything sees *or* tees the data. This way it would be, at least in principle, possible to say âhey, the pipe has consumed the first n vmspliced bytes, so I can reuse that memoryâ.