Почему FUSE readdir возвращает ошибку ввода / вывода? - PullRequest
5 голосов
/ 14 июля 2011

Я вижу странную проблему при реализации функции readdir() в fuse. Обычно, когда я делаю ls для любого каталога в fuse, я получаю такую ​​ошибку, как:

# ls
ls: чтение каталога.: Ошибка ввода / вывода
file1.c file2.c

Но странно то, что readdir() делает именно то, что должен делать. В том смысле, что в этом конкретном каталоге у меня есть два файла с именами file1.c и file2.c, и он может правильно его прочитать.

При отладке проблемы я заметил, что функция fuse filler (fuse_fill_dir_t переданная в качестве аргумента readdir()) - это то, что может вызывать эту ошибку.

Это потому, что если я просто распечатываю содержимое каталога с помощью отладки printf без возврата содержимого с помощью функции filler, я не вижу ошибки.

Но как только я начинаю использовать функцию filler для возврата содержимого, я начинаю видеть эту ошибку.

У меня есть два вопроса, связанных с этим:

1) Кто-нибудь имеет представление о том, почему функция filler может вызывать эту проблему?

2) Как мне найти определение кода для функции fuse_fill_dir_t? Я просмотрел большинство функций fuse с такими аргументами, но до сих пор не повезло.

Любая помощь приветствуется!

Ура, Vinay

1 Ответ

1 голос
/ 13 июня 2012

Такие сообщения могут быть вызваны ошибочными вызовами других (возможно, не реализованных) обратных вызовов FUSE, таких как getxattr().Затем вызывается readdir() и результаты получаются верными.

Вы можете отлаживать файловую систему FUSE, на которой выполняется ее исполняемый файл, с помощью ключа -d (режим отладки), - который не демонизирует процесс и печатает подробный отладочный вывод о вызовах FUSE.

Также было бы неплохо узнать, какая у вас платформа (Linux / OS X / etc).

...