[Ocfs2-devel] [PATCH 1/3] fs: Document the reflink(2) system call.
Joel Becker
Joel.Becker at oracle.com
Tue May 5 15:37:30 PDT 2009
On Tue, May 05, 2009 at 11:30:16PM +0100, Jamie Lokier wrote:
> Joel Becker wrote:
> > I think I'm confusing you. ocfs2 creates a new inode, with a
> > new tree of extent blocks, pointing to the same data extents as the
> > source. You can do *anything* POSIX to that new inode. You can chown
> > it, chmod it, truncate it, futimes it, whatever. The only thing at
> > issue is what the state of the inode is at the return of the reflink()
> > call.
>
> Ok, but does chown/chmod/futimes trigger a COW copy, unsharing the data?
> This is still not clear. :-)
No, of course it doesn't. That would be awful!
> But assuming it stays shared until you modify the actual data, could
> the documentation make this important fact a bit more prominent:
>
> reflink() creates a new file which initially shares the same
> underlying data storage as the source file, and has all the same
> attributes including security context and extended attributes.
>
> After creating the new file, you can do *anything* POSIX to that
> new file. You can chown it, chmod it, futimes it, truncate it,
> write to it, whatever. When the data is modified, that will
> trigger a copy-on-write operation so that the underlying data is
> not completely shared any more.
>
> The amount and timing of copying is filesystem-dependent, but only
> happens when a data write or extended attribute change takes place.
>
> Opening a file, reading it, read-only or private mappings, and
> simple attribute updates (chown, chmod, futimes, as well as
> automatic atime updates) will not trigger copy-on-write and will
> not return ENOSPC errors.
You got it.
Joel
--
"In the room the women come and go
Talking of Michaelangelo."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list