哪些文件系统支持通过Linux的拼接进行拼接(2)?

时间:2010-09-03 18:42:39

标签: c linux filesystems splice zero-copy

man page for the splice system call表示splice可能会失败并将errno设置为EINVAL,如果符合以下条件:

  

目标文件系统不支持拼接;描述符都不是指管道;或不可寻找设备的偏移量

哪些文件系统支持拼接?

2 个答案:

答案 0 :(得分:15)

我的原始答案部分不正确,这是一次重大改写。

Linux 2.6.30.10及以下

在Linux 2.6.30.10及更早版本中,当源文件系统或目标文件系统不支持拼接时,splice会返回EINVAL。以下是支持拼接的文件系统

  • 处于阅读模式:adfs,affs,afs,bfs,btrfs,coda,ecryptfs,exofs,ext2,ext3,ext4,fat,fuse,hpfs,jffs2,jfs,minix,nfs, nilfs2,ntfs,ocfs2,omfs,qnx4,reiserfs,smbfs,sysv,ubifs,udf,ufs。
  • 处于写入模式:exofs,ext2,ext3,ext4,jfs,ocfs2,reiserfs,ubifs。

详情如下。支持在“文件管道”案例中的do_splice_to()函数和“管道到文件”案例中的do_splice_from()函数中确定的拼接。这是通过分别检查相关的struct file_operations是否包含.splice_read.splice_write来完成的。为了生成上面的文件系统列表,我为fs/*/file.c.splice_read 设置了.splice_write

Linux 2.6.31及以上

从Linux 2.6.31开始,所有文件系统都支持在读写模式下进行拼接

详情如下。如果文件系统的.splice_read中没有.splice_writestruct file_operations,则会分别使用回退函数:default_file_splice_readdefault_file_splice_write。有关实施,请参阅do_splice_to()do_splice_from()。注意:由于文档中列出的其他原因,可能仍会返回EINVAL

答案 1 :(得分:0)

根据this,EXT3确实如此。您似乎对任何FUSE文件系统都不满意。