Подтвердить что ты не робот

Какие файловые системы поддерживают сращивание через сращивание Linux (2)?

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

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

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

4b9b3361

Ответ 1

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

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() в случае "pipe to file". Это делается путем проверки, соответствует ли соответствующий struct file_operations .splice_read или .splice_write. Чтобы создать приведенные выше списки файловых систем, я сделал grepped fs/*/file.c для .splice_read и .splice_write.

Linux 2.6.31 и выше

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

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

Ответ 2

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