Re: [PATCH] cowlinks v2

Eric W. Biederman
2004-03-22T00:18:57Z

Jörn Engel <joern@wohnheim.fh-wedel.de> writes:

> On Sun, 21 March 2004 09:59:39 -0800, Davide Libenzi wrote:
> >
> > When I did that, fumes of an in-kernel implementation invaded my head for
> > a little while. Then you start thinking that you have to teach apps of new
> > open(2) semantics, you have to bloat kernel code a little bit and you have
> > to deal with a new set of errors cases that open(2) is not expected to
> > deal with. A fully userspace implementation did fit my needs at that time,
> > even if the LD_PRELOAD trick might break if weak aliases setup for open
> > functions change inside glibc.
>
> 209 fairly simple lines definitely have more appear than a full
> in-kernel implementation with many new corner-cases, yes. But it
> looks as if you ignore the -ENOSPC case, so you cheated a little. ;)
>
> No matter how you try, there is no way around an additional return
> code for open(), so we have to break compatibility anyway. The good
> news is that a) people not using this feature won't notice and b) all
> programs I tried so far can deal with the problem. Vim even has a
> decent error message - as if my patch was anticipated already.

Actually there is... You don't do the copy until an actual write occurs.
Some files are opened read/write when there is simply the chance they might
be written to so delaying the copy is generally a win.

A coworker of mine implemented a version of this idea as a filesystem.
It did the copy in the kernel, it handled directories, and could be
used to atomically snapshot your filesystem. The only case that was
still a little sketchy was how do you handle cow to a file with hard
links.

The interesting case for us is when you have multiple machines sharing
the same root filesystem.

Eric