public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@cambridge.redhat.com>
To: David Howells <dhowells@cambridge.redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] AFS filesystem for Linux (2/2)
Date: Fri, 04 Oct 2002 17:56:36 +0100	[thread overview]
Message-ID: <27504.1033750596@warthog.cambridge.redhat.com> (raw)
In-Reply-To: Message from Jan Harkes <jaharkes@cs.cmu.edu>  of "Fri, 04 Oct 2002 12:07:08 EDT." <20021004160708.GA14737@ravel.coda.cs.cmu.edu>


Hi Jan,

> We automatically resolve directory conflict, file conflicts are 'punted' to
> userspace. There is a manual repair tool, where a user can pick the version
> that he believes is the most appropriate, or he can substitute a replacement
> or merged copy.
>
> There is also a framework for application specific resolvers, these can try
> to automatically merge f.i. calendar files, or email boxes, or
> remove/recompile object files when there is a conflict, etc.

I see. So users have to know how to resolve conflicts themselves...

> For AFS you don't have to care, it's semantics without locking are that
> the 'last writer to close it's fd' wins.

Is that a requirement for AFS? I'm looking at trying to pass writes to the
server as soon as possible.

> I thought you were implementing AFS, how can you choose your model?

Where there's leeway, I can choose.

> How about dirty data, that was locally modified?

In some ways, what I'd ideally like to do is have write() contact the server
and actually send the data direct, then assuming that wasn't rejected, update
the local cache. Any bits of the write that don't overlap pages that are
cached _can_ just be discarded once written to the server, as I can always
retrieve them from the server later, complete with their surrounding data.

Alternatively, I can use prepare-write to make sure I hold copies of all the
pages I want to modify, and then use commit-write to write them back. The
problem with doing that is that I potentially have bits either side that may
end up reverting a write made to the server by someone else.

The third option - using writepage() - has the same problems as the second.

However, I could get around this by doing a binary "diff" of the page in the
local cache against the modified page in memory and just send the changes to
the server. Or, I could then retrieve a fresh copy of the page and apply the
differences to that. The problem there is that I can't detect changes that
have made no difference.

> There is a network latency that comes into play here. If you want last
> writer wins you should not zap dirty data.

I have to zap pages that some other client has modified. The server has told
me to invalidate it, and so I need to reread it from the server.

This is probably only going to be a problem with shared-writable mappings, and
the problem is due to AFS, not how I do my caching.

> So other clients will read inconsistent data if they don't have that
> chunk cached. And if the server generates callbacks on the write of a
> chunk, all clients see the update?

Not with prepare-/commit-write if commit-write is synchronous.

In any case, if they don't have that chunk cached they'll have to fetch it
from the server.

> Ehh, access permissions should already be checked when the file is
> opened. NFS is dealing with the same problems here.

AFS fileservers don't have a concept of an open file. Every time you do a
fetch or a store (be for it data or metadata) you get a short-term "lease" on
the file that the server breaks if some other client modifies it.

Furthermore, every operation a client issues is checked at the RxRPC
level. This way a client can have several users holding a file open in the
local VFS and just label the operations sent to the server with tokens
representing the users doing the access.

How does Coda do it? Does it get "open" the file on the server with a
particular set of credentials for each user that wants to use it?

> >      How does Coda deal with this security problem?
> 
> What problem?

For instance: you have one file in your cache, several people write to it, but
one of the people in the middle had permission taken away as far as the server
is concerned.

Also, when writing the file back, if several people have changed it, whose
credentials do you present to the server as having made the change?

> If you don't have write permission you can't write to the file. If you do
> have write permissions you can write. When the last writer closes it's
> filehandle the data is sent to the server with his permissions.

What if someone changes the permissions on the server's copy of the file
whilst you have the file open?

> Now if the ACL is changed on the servers before the close so that this last
> writer loses write access we get a 'conflict' that is punted to userspace,
> similar to the case when writing to an already updated file.

This is what I was getting at. The main issue is how do you deal with a file
in the cache that has been written to by several people, some of whom don't
have write permission any more.

> So I store it in VM on the disk and you store it in your private FS on
> disk. Looks like the same thing to me, except I get to enjoy the benefits of
> the page/swapcache keeping the data in memory when it is frequently used
> without having to do anything smart.

And I get to enjoy the benefits of the pagecache keeping the data in memory
when it is frequently used, and I can also do smart stuff and try to optimise
access.

> Virtual Memory. A private mmap of a file.

I thought you might have meant a "Volume Manager" rather than the kernel's VM
subsystem.

> Updates dirty the pages, so they end up in swap, but we log the same update
> in a logfile (journal), when the log fills up, the changes written directly
> to the underlying file.

So you keep everything in triplicate whilst running? (or at least duplicate
plus a frequently emptied journal).

> Optionally, when we know that the swap copy and the file copy of the page
> are identical, the page is remapped to reduce swap usage. That is where we
> store all the metadata and the Coda file -> cache file mappings so that they
> can survive a reboot or system crash.

I see... you can have dirty data residing in the cache over a reboot, and thus
you can't just nuke your cache partially or wholly, and you have to keep
careful account of all the entries in there... Hmmm... I'll have to think
about that, but I don't think it'll be a problem, provided I don't let close()
complete until all the dirty data from a file is written to the server.

David

  reply	other threads:[~2002-10-04 16:51 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
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 [this message]
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=27504.1033750596@warthog.cambridge.redhat.com \
    --to=dhowells@cambridge.redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /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