The man page for the splice system call says that splice may fail and set errno to EINVAL if:
Target file system doesn't support splicing; neither of the descriptors refers to a pipe; or offset given for non-seekable device
Which file systems support splicing?