From: Ian Stirling <ian.stirling@mauve.plus.com>
To: Rob Landley <rob@landley.net>
Cc: "Pavel Machek" <pavel@ucw.cz>,
"Jörn Engel" <joern@wohnheim.fh-wedel.de>,
linux-kernel@vger.kernel.org
Subject: Re: [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks
Date: Wed, 26 May 2004 01:16:31 +0100 [thread overview]
Message-ID: <40B3E1DF.10001@mauve.plus.com> (raw)
In-Reply-To: <200405251816.05497.rob@landley.net>
Rob Landley wrote:
> On Tuesday 25 May 2004 17:08, Pavel Machek wrote:
>
>
>>>Doesn't asynchronous sendfile has the little problem your process can
>>>exit before the sendfile is complete?
>>
>>Hmm, it has...
>>
>>
>>>I'm not sure how much of a help it really is, since fork() isn't brain
>>>surgery if you want it to be asynchronous, and the lifetime rules are
>>>really explicit then. (With a ps that does thread grouping, this isn't
>>>too bad from a clutter standpoint, even. And you automatically get a
>>>SIGCHLD when the sendfile is complete, too...)
>>
>>Right.
>>
>>
>>>Of course if the syscall can make the sendfile outlive the process that
>>>fired it off, then by all means it sounds good. I dunno how much extra
>>>work that is for the kernel, though.
>>
>>Well, it would be "interesting" to stop that sendfile then. You could
>>not kill it etc.
>
>
> Well, logically what you're doing is redirecting an existing filehandle so it
> points to something else. Instead of reading from this pipe, you're now
> reading from this file or from this network socket, or this other process's
> stdout. So any intermediate processes going away is theoretically okay as
> long as the anchors at each end remain (process/filesystem/network connection
> generating the data, process/filesystem/network connection receiving the
> data).
>
> The easy way to make the semantics work out right is that such an asynchronous
> sendfile would effectively close the file in question from the point of view
> of the process that did the sendfile. It would pretty much have to be part
> of the semantics of any asynchronous sendfile call: welding together the two
> filehandles would behave like a single direction shutdown(2) as far as the
> process that called sendfile is concerned. (That way, if you do an async
> sendfile in each direction, the filehandle is closed both ways, but you don't
> HAVE to if you don't want to. You can feed data to a child process from a
> script file or something, and just deal with the responses coming back.)
>
> This would mean that in theory the process that did the sendfile could go away
> without too much ambiguity about what should happen. (The bits that are
> already closed from the process's point of view are unaffected by the process
> exiting.) I dunno what's needed to clean that up in the kernel.
>
> I also don't know if it's a good idea, because as you noticed the fire and
> forget nature of the thing means that killing it afterwards is something we
> haven't got a semantic for if the thing at the other end is NOT a pipe to a
> processes. (We kill processes. We don't have a kill for network connections
> or for files in the filesystem that are no longer associated with any
> process. This is theoretically existing problem, by the way. Check out
> SO_LINGER in man 7 socket...)
>
A while back (2.2?) I was using a util that came with netpipes, sockdown.
Give it a socket FD, and it would close the socket.
It wasn't intended for it, but I found that it was really handy to
be able to shut other programs network connections.
For example, tin gets wedged talking to a server that won't do something, and
you just do
sockdown </proc/tin/fd/nn
And it shuts.
Mildly annoyingly, this stopped working in 2.4.
I suppose it'd be totally insane for init to inherit descriptors for open network
connections.
next prev parent reply other threads:[~2004-05-26 0:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-06 13:17 [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks Jörn Engel
2004-05-06 13:18 ` [PATCH COW] generic_sendpage Jörn Engel
2004-05-06 13:19 ` [PATCH COW] sendfile Jörn Engel
2004-05-06 13:19 ` [PATCH COW] copyfile Jörn Engel
2004-05-06 13:20 ` [PATCH COW] lock_flags Jörn Engel
2004-05-06 13:21 ` [PATCH COW] MAD COW Jörn Engel
2004-05-08 13:45 ` [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks Denis Vlasenko
2004-05-08 22:10 ` Pavel Machek
2004-05-09 14:09 ` Denis Vlasenko
2004-05-09 21:53 ` Pavel Machek
2004-05-10 15:44 ` Jörn Engel
2004-05-10 15:51 ` Pavel Machek
2004-05-10 15:56 ` Jörn Engel
2004-05-12 0:26 ` Jamie Lokier
2004-05-13 10:56 ` Jörn Engel
2004-05-12 20:29 ` Rob Landley
2004-05-08 22:48 ` Pavel Machek
2004-05-10 15:53 ` Jörn Engel
2004-05-10 19:26 ` Jan Harkes
2004-05-11 10:02 ` Jörn Engel
2004-05-11 14:08 ` Jan Harkes
2004-05-11 14:18 ` Jan Harkes
2004-05-11 14:33 ` Jörn Engel
2004-05-21 23:23 ` Rob Landley
2004-05-25 22:46 ` Jan Harkes
2004-05-11 15:40 ` Steve French
2004-05-11 15:58 ` Jörn Engel
2004-05-10 5:15 ` Eric W. Biederman
2004-05-10 15:59 ` Jörn Engel
2004-05-12 16:39 ` Rob Landley
2004-05-20 13:49 ` Pavel Machek
2004-05-25 21:55 ` Rob Landley
2004-05-25 22:08 ` Pavel Machek
2004-05-25 23:16 ` Rob Landley
2004-05-26 0:16 ` Ian Stirling [this message]
2004-05-26 9:52 ` Jörn Engel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40B3E1DF.10001@mauve.plus.com \
--to=ian.stirling@mauve.plus.com \
--cc=joern@wohnheim.fh-wedel.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=rob@landley.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox