On 25/05/2022 18:05, Goffredo Baroncelli wrote:
Hi All,

recently I discovered that BTRFS allow to reflink a file only if the flag 
FS_NOCOW_FL is the same on both source and destination.
In the end of this email I added a patch to "cp" to set the FS_NOCOW_FL flag 
according to the source.

Even tough this works, I am wondering if this is the expected/the least 
surprise behavior by/for any user. This is the reason why this email is tagged 
as RFC.

Without reflink, the default behavior is that the new file has the FS_NOCOW_FL 
flag set according to the parent directory; with this patch the flag would be 
the same as the source.

I am not sure that this is the correct behviour without warning the user of 
this change.

Another possibility, is to flip the NOCOW flag only if --reflink=always is 
passed.

Thoughts ?

This flag corresponds to the 'C' chattr attribute,
to allow users to explicitly disable CoW on certain files
or files within certain dirs.

I don't think cp should be overriding that explicit config.  I.e.:
  cp --reflink=auto => try reflink but fall back to normal copy
  cp --reflink=always => try reflink and fail if not possible

We would need another option to bypass system config
(like --reflink=force), however I don't think that's
appropriate functionality for cp.

thanks,
Pádraig

Reply via email to