Re: [RFC][PATCH 10/14] In-kernel file copy between union mounted filesystems

Shaya Potter
2007-05-22T12:46:22Z

Bharata B Rao wrote:
> On Tue, May 22, 2007 at 08:25:16AM +0200, Jan Engelhardt wrote:
>> On May 22 2007 08:43, Bharata B Rao wrote:
>>> On Fri, May 18, 2007 at 09:47:31AM -0400, Shaya Potter wrote:
>>>> Bharata B Rao wrote:
>>>>
>>>>> Not really. This is called during copyup of a file residing in a lower
>>>>> layer. And that is done only for regular files.
>>>> That is broken.
>>> But it only breaks the semantics (in other cases we allow writes only to the
>>> top layer files). So the question is why do we have to copy up the device
>>> node ? What difference it makes to writing to the device itself ?
>> Because `chmod 666 blockdevnode` is not the same as writing
>> to the device itself?
>
> What if that chmod is applied on the lower level device node ? This is what
> we do currently, even for regular files. Copyup happens only when the file
> is opened for writing.
>
> Let me rephrase my earlier question:
>
> In case of regular files, when we copyup a file, we are actually preventing
> any writes to the lower layers (which we have designated as read only).
>
> Applying the same logic to devices, what do we achieve by copying them up ?
> How does it matter if we write to the device through a node in the upper
> layer or in the lower layer. Both the writes eventually do the same thing.

What happens if the lower layer is on a read only medium. But the top
layer is RW. Why can't one change permissions? In your model, one can't.

What happens if one wants to share a lower layer read-only (I'm doing
this with my research into uses of union file systems), one doesn't want
permission change in one use of the lower layer to affect any of the
other uses.

> What I am trying to understand is, if the need for copyup is purely a matter
> of conforming to semantics (of not allowing writes to the lower layers in
> case of union mount) or do we achieve anything else by doing a device
> copyup ? Are there any cases where copying up of device nodes are absolutely
> essential for sane behaviour ?

If the lower layer is relatively immutable (ignoring atime) it can be
shared in a RO manner by multiple unions. If it's not, it can't be.
Also, copyup is needed in general as the RO union layer can be on a RO
file system but the union will not be RO.