Какие файловые системы поддерживают сплайсинг через Linux splice (2)? - PullRequest
18 голосов
/ 03 сентября 2010

Страница man для системного вызова splice сообщает, что splice может завершиться ошибкой и установить errno в EINVAL, если:

Целевая файловая система не поддерживает соединение; ни один из дескрипторов не ссылается на канал; или смещение, заданное для невыбираемого устройства

Какие файловые системы поддерживают объединение?

Ответы [ 2 ]

15 голосов
/ 08 сентября 2010

Мой первоначальный ответ был частично неверным, это серьезная перезапись.

Linux 2.6.30.10 и ниже

В Linux 2.6.30.10 и старше, splice возвращает EINVAL, когдаисходная или целевая файловая система не поддерживает соединение.Вот файловые системы, которые поддерживают сращивание :

  • в режиме чтения : adfs, affs, afs, bfs, btrfs, coda, ecryptfs, exofs,ext2, ext3, ext4, жир, предохранитель, 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 и выше

Начиная с Linux2.6.31, все файловые системы поддерживают сращивание как в режиме чтения, так и в режиме записи .

Подробности приведены ниже.Когда файловая система не имеет .splice_read или .splice_write в своих struct file_operations, используется резервная функция: default_file_splice_read и default_file_splice_write, соответственно.См. do_splice_to() и do_splice_from() для реализации.Примечание: EINVAL может быть возвращено по другим причинам, указанным в документации.

0 голосов
/ 03 сентября 2010

Согласно это , EXT3 делает. Кажется, вам может не повезти с любой файловой системой FUSE.

...