If copy_file_range performs a copy using splice, it converts holes to zeros. This effort primarily changes this behavior to create holes when it is possible. I am not sure if we should put it under a flag, but I think this should be the default behavior as opposed to converting holes to allocated zeros. We can use a flag to instruct copy_file_range() to convert holes to allocated zeros. Let me know.. We should be able to splice files if they do not belong the same super_block. overlay copy_up can benefit from this. This could make it ready for coreutils/cp to use copy_file_range(), primarily to deal with --sparse=WHEN option. -- Goldwyn