It looks like the FICLONE ioctl was chosen over the copy_file_range syscall[1] for use in coreutils due to concerns about copy_file_range not preserving holes.[2] I agree, it would be interesting to know how these compare, both in filesystem implementation coverage and performance.