From: David Howells <dhowells@cambridge.redhat.com>
To: David Howells <dhowells@cambridge.redhat.com>,
Linus Torvalds <torvalds@transmeta.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] AFS filesystem for Linux (2/2)
Date: Thu, 03 Oct 2002 22:46:05 +0100 [thread overview]
Message-ID: <15361.1033681565@warthog.cambridge.redhat.com> (raw)
In-Reply-To: Message from Jan Harkes <jaharkes@cs.cmu.edu> of "Thu, 03 Oct 2002 12:53:04 EDT." <20021003165304.GA25718@ravel.coda.cs.cmu.edu>
Hi Jan,
Do I take it you were (partially) responsible for Coda development? I have to
admit I don't know much about Coda.
> So you want to eventually link kerberos into the kernel to get the
> security right?
That's unnecessary judging by OpenAFS. AFAICT, only the ticket needs to be
cached in the kernel (this is obtained by means of a userspace program), and
then the ticket is passed through the security challenge/response mechanism
provided by RxRPC.
Otherwise, the entire network side of OpenAFS would have to be in userspace
too, I suspect.
It may be possible to offload the security aspects to userspace. I'll have to
think about that.
Besides, I get the impression that NFSv4 may require some level of kerberos
support in the kernel.
> Coda 'solves' the page-aliasing issues by passing the kernel the same file
> descriptor as it is using itself to put the data into the container (cache)
> file. You could do the same and tell the kernel what the 'expected size' is,
> it can then block or trigger further fetches when that part of the file
> isn't available yet.
I presume Coda uses a 1:1 mapping between Coda files and cache files stored
under a local filesystem (such as EXT3). If so, how do you detect holes in the
file, given that the underlying fs doesn't permit you to differentiate between
a hole and a block of zeros.
> We don't need to do it at such a granualarity because of the disconnected
> operation. It is more reliable as we can return a stale copy when we lose
> the network halfway during the fetch.
OTOH, if you have a copy that you know is now out of date, then one could
argue that you shouldn't let the user/application see it, as they/it are then
basing anything they do on known "bad" data.
Should I also take it that Coda keeps the old file around until it has fetched
a revised copy? If so, then surely you can't update a file unless your cache
can find room for the entire revised copy. Surely another consequence of this
is that the practical maximum file size you can deal with is half the size of
your cache.
> Hmm, a version of AFS that doesn't adhere to AFS semantics, interesting.
> Are you going to emulate the same broken behaviour as transarc AFS on
> O_RDWR? Basically when you open a file O_RDWR and write some data, and
> anyone else 'commits' an update to the file before you close the
> filehandle. Your client writes back the previously committed data, which it
> has proactively fetched, but with the local metadata (i.e. i_size). So you
> end up with something that closely resembles neither of the actual versions
> that were written.
What I'm intending to do is have the write VFS method attempt to write the new
data direct to the server and to the cache simultaneously where possible. If
the volume is not available for some reason, I have a number of choices:
(1) Make the write block until the volume becomes available again.
(2) Immediately(-ish) fail with an error.
(3) Store the write in the cache and try and sync up with the volume when it
becomes available again.
However, with shared writable mappings, this isn't necessarily possible as we
can only really get the data when the VM prods our writepage(s) method. In
this case, we have another choice:
(4) "Diff" the page in the pagecache against a copy stored in the cache and
try to send the changes to the server.
Using disconnected operation doesn't actually make this any easier. The
problem of how and when write conflicts are resolved still arises.
There is a fifth option, and that is to try to lock the target file against
other accessors whilst we are trying to write to it (prepare/commit write
maybe).
> Different underlying filesystems will lay out their data differently, who
> says that ext3 with the dirindex hashes or reiserfs, or foofs will not
> suddenly break your solution and still work reliable (and faster) from
> userspace.
Because (and I may not have made this clear) you nominate a block device as
the cache, not an already existing filesystem, and mount it as afscache
filesystem type. _This_ specifies the layout of the cache, and so whatever
other filesystems do is irrelevant.
> Can you say hack.
No need to. I can go direct to the block device through the BIO system, and so
can throw a heap of requests at the blockdev and deal with them as they
complete, in the order they are read off of the disc when scanning catalogues.
> When you can a file from userspace the kernel will give you readahead, and
> with a well working elevator any 'improvements' you obtain really should end
> up in the noise.
Since I can fire off several requests simultaneously, I effectively obtain a
readahead type of effect, and since I don't have to follow any ordering
constraints (my catalogues are unordered), I can deal with the blocks in
whatever order the elevator delivers them to me.
> Intermezzo does the same thing, they even proposed a 'punch hole' syscall to
> allow a userspace daemon to 'invalidate' parts of a file so that the kernel
> will send the upcall to refetch the data from the server.
I don't need a hole punching syscall or ioctl. Apart from the fact that the
filesystem is already in the kernel and doesn't require a syscall, the cache
filesystem has to discard an entire file as a whole when it notices or is told
of a change.
> VM/VFS will handle appropriate readahead for you, you might just want to
> join the separate requests into one bigger request.
Agreed. That would be a reasonable way of doing it. The reason I thought of
doing it the way I suggested is that I could make the block size bigger in the
cache, and thus reduce indexing walking latency for adjacent pages.
> And one definite advantage, you actually provide AFS session semantics.
According to the AFS-3 Architectural Overview, "AFS does _not_ provide for
completely disconnected operation of file system clients" [their emphasis].
Furthermore, the overview also talks about "Chunked Access", in which it
allows files to be pulled over to the client and pushed back to the server in
chunks of 64Kb, thus allowing "AFS files of any size to be accessed from a
client".
Note that 64Kb is also a "default" that can be configured.
It also mentions that the read-entire-file notion was dropped, giving some of
the reasons I've mentioned.
> And my current development version of Coda has {cell,volume,vnode,unique}
> (128 bits), which is the same size as a UUID which was designed to have a
> very high probability of uniqueness. So if I ever consider adding another
> 'ident', I'll just switch to identifying each object with a UUID.
Does this mean that every Coda cell is issued with a 4-byte ID number? Or does
there need to be an additional index in the cache?
> How about IPv6?
These were just examples I know fairly well to illustrate the problems.
> Or you could use a hash or a userspace daemon that can map a fs-specific
> handle to a local cache file.
You still have to store a hash somewhere, and if it's stored in a userspace
daemon's VM, then it'll probably end up being swapped out to disc, and it may
have to be regenerated from indices every time the daemon is restarted (or
else your cache has to be started afresh.
Thanks for your insights though.
Cheers,
David
next prev parent reply other threads:[~2002-10-03 21:40 UTC|newest]
Thread overview: 316+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <7146.1033580256@warthog.cambridge.redhat.com>
2002-10-03 0:36 ` [PATCH] AFS filesystem for Linux (2/2) Linus Torvalds
2002-10-03 9:05 ` David Howells
2002-10-03 16:53 ` Jan Harkes
2002-10-03 17:45 ` Jan Harkes
2002-10-03 21:46 ` David Howells [this message]
2002-10-04 8:13 ` David Howells
[not found] ` <15381.1033681790@warthog.cambridge.redhat.com>
2002-10-04 14:02 ` Jan Harkes
2002-10-04 14:40 ` Trond Myklebust
2002-10-04 15:35 ` David Howells
2002-10-04 15:53 ` Trond Myklebust
2002-10-04 15:56 ` David Howells
2002-10-04 16:03 ` Trond Myklebust
2002-10-04 16:17 ` David Howells
2002-10-04 17:04 ` Trond Myklebust
2002-10-04 17:29 ` David Howells
2002-10-07 14:14 ` David Howells
2002-10-07 14:54 ` Trond Myklebust
2002-10-07 15:36 ` David Howells
2002-10-04 16:30 ` Andreas Dilger
2002-10-04 15:34 ` David Howells
2002-10-04 16:07 ` Jan Harkes
2002-10-04 16:56 ` David Howells
2002-10-04 17:36 ` Jan Harkes
2002-10-07 9:14 ` David Howells
2002-10-06 16:49 ` Troy Benjegerdes
2002-10-07 9:16 ` David Howells
2002-10-04 14:11 ` [patch] [kkern] " Patrick Audley
2001-05-14 19:19 LANANA: To Pending Device Number Registrants H. Peter Anvin
2001-05-14 19:36 ` Jeff Garzik
2001-05-14 19:57 ` H. Peter Anvin
2001-05-14 20:04 ` Jeff Garzik
2001-05-14 20:09 ` Alan Cox
2001-05-14 20:24 ` Jeff Garzik
2001-05-14 20:27 ` H. Peter Anvin
2001-05-14 22:21 ` Alan Cox
2001-05-14 23:43 ` Jan Niehusmann
2001-05-14 23:48 ` Alan Cox
2001-05-14 20:29 ` Linus Torvalds
2001-05-14 20:55 ` Neil Brown
2001-05-14 21:20 ` Alan Cox
2001-05-14 21:37 ` Neil Brown
2001-05-14 21:24 ` Jeff Garzik
2001-05-14 21:33 ` Neil Brown
2001-05-15 6:41 ` Linus Torvalds
2001-05-15 8:57 ` Alan Cox
2001-05-15 9:08 ` Linus Torvalds
2001-05-15 9:26 ` Alan Cox
2001-05-15 9:49 ` Alexander Viro
2001-05-15 9:51 ` Alan Cox
2001-05-15 10:12 ` Alexander Viro
2001-05-15 10:36 ` Alan Cox
2001-05-15 15:16 ` Linus Torvalds
2001-05-15 20:55 ` Alan Cox
2001-05-15 15:10 ` Linus Torvalds
2001-05-15 15:29 ` Alexander Viro
2001-05-15 17:21 ` James Simmons
2001-05-15 17:25 ` Alexander Viro
2001-05-15 17:29 ` James Simmons
2001-05-15 17:32 ` Alexander Viro
2001-05-15 17:44 ` James Simmons
2001-05-15 18:18 ` Ingo Oeser
2001-05-15 18:36 ` James Simmons
2001-05-15 18:42 ` Alexander Viro
2001-05-16 8:29 ` Helge Hafting
2001-05-16 17:16 ` James Simmons
2001-05-15 21:46 ` Chip Salzenberg
2001-05-15 21:50 ` James Simmons
2001-05-15 18:04 ` Linus Torvalds
2001-05-15 18:58 ` Johannes Erdfelt
2001-05-15 19:17 ` Linus Torvalds
2001-05-15 19:23 ` H. Peter Anvin
2001-05-15 19:43 ` Johannes Erdfelt
2001-05-15 21:58 ` Chip Salzenberg
2001-05-16 8:51 ` Helge Hafting
2001-05-17 10:20 ` Pavel Machek
2001-05-18 17:32 ` Johannes Erdfelt
2001-05-19 10:21 ` Pavel Machek
2001-05-17 20:40 ` Kai Henningsen
2001-05-17 22:46 ` Johannes Erdfelt
2001-05-19 8:18 ` Kai Henningsen
2001-05-15 20:03 ` James Simmons
2001-05-15 20:06 ` H. Peter Anvin
2001-05-15 20:28 ` James Simmons
2001-05-15 21:20 ` Nicolas Pitre
2001-05-15 21:28 ` James Simmons
2001-05-15 21:31 ` H. Peter Anvin
2001-05-16 7:11 ` Kai Henningsen
2001-05-16 7:43 ` Alexander Viro
2001-05-16 9:45 ` Malcolm Beattie
2001-05-15 21:43 ` Johannes Erdfelt
2001-05-15 21:49 ` James Simmons
2001-05-16 7:05 ` Kai Henningsen
2001-05-15 22:07 ` Alan Cox
2001-05-16 0:59 ` Daniel Phillips
2001-05-16 1:34 ` Nicolas Pitre
2001-05-16 1:51 ` Jonathan Lundell
2001-05-16 7:17 ` Kai Henningsen
2001-05-16 11:34 ` Erik Mouw
2001-05-17 17:07 ` Eric W. Biederman
2001-05-17 19:30 ` Jeff Randall
2001-05-15 20:14 ` Alexander Viro
2001-05-15 20:30 ` H. Peter Anvin
2001-05-15 20:41 ` Alexander Viro
2001-05-15 20:51 ` Linus Torvalds
2001-05-16 1:01 ` Daniel Phillips
2001-05-16 1:04 ` H. Peter Anvin
2001-05-15 20:37 ` Linus Torvalds
2001-05-15 20:56 ` Jeff Garzik
2001-05-15 21:22 ` James Simmons
2001-05-17 10:42 ` Pavel Machek
2001-05-18 18:32 ` James Simmons
2001-05-19 10:23 ` no ioctls for serial ports? [was Re: LANANA: To Pending Device Number Registrants] Pavel Machek
2001-05-19 19:00 ` Linus Torvalds
2001-05-19 19:17 ` Pavel Machek
2001-05-19 19:35 ` Linus Torvalds
2001-05-19 19:43 ` Pavel Machek
2001-05-19 20:31 ` Tim Jansen
2001-05-19 23:57 ` Alexander Viro
2001-05-20 7:18 ` no ioctls for serial ports? [was Re: LANANA: To Pending DeviceNumber Registrants] Abramo Bagnara
2001-05-20 7:41 ` Alexander Viro
2001-05-20 8:30 ` no ioctls for serial ports? [was Re: LANANA: To Pending DeviceNumberRegistrants] Abramo Bagnara
2001-05-20 10:09 ` Alexander Viro
2001-05-20 9:53 ` no ioctls for serial ports? [was Re: LANANA: To Pending Device Num Kai Henningsen
2001-05-20 13:40 ` Alexander Viro
2001-05-20 14:27 ` Tim Jansen
2001-05-20 14:30 ` no ioctls for serial ports? [was Re: LANANA: To Pending DeviceNum Abramo Bagnara
2001-05-20 14:45 ` Alexander Viro
2001-05-20 15:00 ` Abramo Bagnara
2001-05-20 15:18 ` Alexander Viro
2001-05-20 15:40 ` Abramo Bagnara
2001-05-20 16:01 ` Alexander Viro
2001-05-20 15:26 ` Jakob Østergaard
2001-05-20 15:42 ` Alexander Viro
2001-05-21 17:45 ` Oliver Xymoron
2001-05-21 18:14 ` Alexander Viro
2001-05-21 18:37 ` Oliver Xymoron
2001-05-21 18:49 ` Alexander Viro
2001-05-21 19:08 ` Oliver Xymoron
2001-05-22 5:56 ` no ioctls for serial ports? [was Re: LANANA: To Pending Device Num Pavel Machek
2001-05-20 0:01 ` no ioctls for serial ports? [was Re: LANANA: To Pending Device Number Registrants] Alexander Viro
2001-05-20 11:17 ` handling network using filesystem [was Re: no ioctls for serial ports?] Pavel Machek
2001-05-19 20:11 ` no ioctls for serial ports? [was Re: LANANA: To Pending DeviceNumber Registrants] Abramo Bagnara
2001-05-17 20:33 ` LANANA: To Pending Device Number Registrants Kai Henningsen
2001-05-15 20:57 ` James Simmons
2001-05-15 20:17 ` H. Peter Anvin
2001-05-15 21:59 ` Chip Salzenberg
2001-05-15 22:51 ` James Simmons
2001-05-15 21:22 ` Jan Harkes
2001-05-15 21:39 ` Martin Dalecki
2001-05-15 18:02 ` Ingo Oeser
2001-05-15 19:31 ` Richard Gooch
2001-05-15 19:37 ` H. Peter Anvin
2001-05-15 20:10 ` Alan Cox
2001-05-15 21:41 ` Richard Gooch
2001-05-15 21:47 ` Alexander Viro
2001-05-15 22:24 ` Richard Gooch
2001-05-15 22:27 ` H. Peter Anvin
2001-05-15 22:38 ` Alexander Viro
2001-05-15 22:14 ` Alan Cox
2001-05-15 22:28 ` Richard Gooch
2001-05-15 22:32 ` H. Peter Anvin
2001-05-15 22:33 ` Alan Cox
2001-05-16 7:21 ` Geert Uytterhoeven
2001-05-16 18:22 ` Richard Gooch
2001-05-16 19:36 ` H. Peter Anvin
2001-05-16 20:01 ` Richard Gooch
2001-05-16 20:05 ` H. Peter Anvin
2001-05-16 20:54 ` Richard Gooch
2001-05-16 21:36 ` H. Peter Anvin
2001-05-16 22:11 ` Ingo Oeser
2001-05-16 22:13 ` H. Peter Anvin
2001-05-16 22:21 ` Jens Axboe
2001-05-16 23:03 ` Richard Gooch
2001-05-16 23:25 ` H. Peter Anvin
2001-05-16 23:37 ` Richard Gooch
2001-05-16 23:38 ` H. Peter Anvin
2001-05-16 23:41 ` Richard Gooch
2001-05-16 23:43 ` H. Peter Anvin
2001-05-16 23:49 ` Richard Gooch
2001-05-16 23:55 ` H. Peter Anvin
2001-05-17 21:12 ` Kai Henningsen
2001-05-17 21:06 ` Kai Henningsen
2001-05-16 20:18 ` Linus Torvalds
2001-05-16 20:44 ` Richard Gooch
2001-05-16 23:51 ` Alan Cox
2001-05-16 23:58 ` Richard Gooch
2001-05-17 0:12 ` H. Peter Anvin
2001-05-17 0:24 ` Alan Cox
2001-05-17 1:35 ` Jeff Garzik
2001-05-17 9:33 ` Guest section DW
2001-05-15 20:58 ` Alan Cox
2001-05-15 21:42 ` Chip Salzenberg
2001-05-15 21:46 ` Alexander Viro
2001-05-15 21:57 ` H. Peter Anvin
2001-05-15 22:07 ` Chip Salzenberg
2001-05-15 22:11 ` H. Peter Anvin
2001-05-15 22:18 ` Alan Cox
2001-05-15 21:40 ` Chip Salzenberg
2001-05-15 22:12 ` Alan Cox
2001-05-15 22:19 ` H. Peter Anvin
2001-05-15 22:28 ` Alan Cox
2001-05-15 22:34 ` H. Peter Anvin
2001-05-15 23:39 ` Chip Salzenberg
2001-05-16 20:37 ` Alan Cox
2001-05-15 22:49 ` James Simmons
2001-05-15 23:22 ` Kenneth Johansson
2001-05-15 9:28 ` Alan Cox
2001-05-15 15:15 ` Linus Torvalds
2001-05-15 15:19 ` Jeff Garzik
2001-05-15 15:45 ` Linus Torvalds
2001-05-15 17:27 ` James Simmons
2001-05-15 17:43 ` Linus Torvalds
2001-05-15 18:04 ` Jeff Garzik
2001-05-15 18:15 ` Linus Torvalds
2001-05-15 19:33 ` Kai Henningsen
2001-05-15 19:36 ` Jonathan Lundell
2001-05-15 20:18 ` Linus Torvalds
2001-05-15 20:26 ` Dan Hollis
2001-05-15 22:14 ` Miles Lane
2001-05-15 21:29 ` Alex Bligh - linux-kernel
2001-05-15 21:36 ` Linus Torvalds
2001-05-15 22:03 ` Jeff Mahoney
2001-05-15 22:42 ` Andreas Dilger
2001-05-15 21:51 ` Mark Frazer
2001-05-15 22:35 ` Bob Glamm
2001-05-16 0:56 ` Jonathan Lundell
2001-05-16 2:31 ` Andrew Morton
2001-05-16 6:56 ` Jonathan Lundell
2001-05-16 8:02 ` Vojtech Pavlik
2001-05-16 14:37 ` Jonathan Lundell
2001-05-16 14:57 ` Vojtech Pavlik
2001-05-16 15:24 ` Jonathan Lundell
2001-05-16 12:20 ` Bogdan Costescu
2001-05-16 7:24 ` Geert Uytterhoeven
2001-05-16 23:26 ` Alan Cox
2001-05-16 23:31 ` H. Peter Anvin
2001-05-16 23:53 ` Linus Torvalds
2001-05-17 0:21 ` Alan Cox
2001-05-17 7:57 ` Geert Uytterhoeven
2001-05-17 16:26 ` James Simmons
2001-05-17 6:43 ` Thomas Sailer
2001-05-17 16:58 ` Tim Jansen
2001-05-17 17:18 ` James Simmons
2001-05-17 17:29 ` Geert Uytterhoeven
2001-05-17 17:41 ` Tim Jansen
2001-05-17 22:03 ` Oliver Neukum
2001-05-16 23:52 ` Linus Torvalds
2001-05-17 1:26 ` Joel Becker
2001-05-16 16:04 ` Michael Meissner
2001-05-16 21:36 ` Andreas Dilger
2001-05-17 21:23 ` Kai Henningsen
2001-05-18 2:18 ` Jonathan Lundell
2001-05-19 8:42 ` Kai Henningsen
2001-05-19 17:36 ` Jonathan Lundell
2001-05-20 9:37 ` Eric W. Biederman
2001-05-20 15:54 ` Jonathan Lundell
2001-05-20 14:16 ` Chris Wedgwood
2001-05-20 15:57 ` Jonathan Lundell
2001-05-19 17:45 ` Jonathan Lundell
2001-05-16 7:25 ` Geert Uytterhoeven
2001-05-15 18:19 ` James Simmons
2001-05-15 20:23 ` Alan Cox
2001-05-15 20:28 ` H. Peter Anvin
2001-05-15 21:52 ` Andreas Dilger
2001-05-15 20:02 ` Dan Hollis
2001-05-15 11:44 ` Neil Brown
2001-05-15 15:34 ` Linus Torvalds
2001-05-16 1:00 ` Daniel Phillips
2001-05-16 12:58 ` Jens Axboe
2001-05-16 3:25 ` Neil Brown
2001-05-15 15:51 ` John Fremlin
2001-05-14 21:09 ` Andi Kleen
2001-05-14 23:34 ` Richard Gooch
2001-05-14 21:11 ` Rik van Riel
2001-05-14 21:23 ` Alan Cox
2001-05-15 0:33 ` Rik van Riel
2001-05-16 9:04 ` Ingo Oeser
2001-05-14 21:16 ` Alan Cox
2001-05-14 22:05 ` Alexander Viro
2001-05-14 22:30 ` Alan Cox
2001-05-14 22:48 ` Alexander Viro
2001-05-14 22:46 ` Alan Cox
2001-05-14 22:53 ` Alexander Viro
2001-05-14 22:54 ` H. Peter Anvin
2001-05-14 23:00 ` Alexander Viro
2001-05-14 22:58 ` Alan Cox
2001-05-14 23:29 ` Alexander Viro
2001-05-14 23:39 ` Richard Gooch
2001-05-15 4:20 ` God
2001-05-15 7:48 ` 2.4 " bert hubert
2001-05-15 8:54 ` Alan Cox
2001-05-15 9:09 ` bert hubert
2001-05-14 23:18 ` LANANA: " Arjan van de Ven
2001-05-14 23:20 ` Alan Cox
2001-05-15 18:57 ` Kai Henningsen
2001-05-15 5:56 ` Oliver Neukum
2001-05-15 5:59 ` H. Peter Anvin
2001-05-14 22:55 ` Alan Cox
2001-05-14 23:11 ` Dan Hollis
2001-05-14 23:19 ` Alan Cox
2001-05-14 23:23 ` Alexander Viro
2001-05-15 1:10 ` Keith Owens
2001-05-15 4:12 ` LANANA: Getting out of hand? God
2001-05-15 4:30 ` Linus Torvalds
2001-05-15 5:17 ` Linus Torvalds
2001-05-15 8:24 ` Geert Uytterhoeven
2001-05-15 8:48 ` Alan Cox
2001-05-15 21:16 ` Martin Dalecki
2001-05-14 23:01 ` Interrupted sound with 2.4.4-ac6 Hermann Himmelbauer
2001-05-14 21:18 ` LANANA: To Pending Device Number Registrants Alan Cox
2001-05-14 23:32 ` Richard Gooch
2001-05-14 20:09 ` Richard Gooch
2001-05-14 20:14 ` Jeff Garzik
2001-05-15 17:37 ` Pavel Machek
2001-05-17 11:32 ` Alan Cox
2001-05-16 15:58 ` Kurt Garloff
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=15361.1033681565@warthog.cambridge.redhat.com \
--to=dhowells@cambridge.redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/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