проблема с предохранителем - PullRequest
2 голосов
/ 28 июля 2010

Я разрабатываю fuse fs на python (с привязками fuse-python).Какой метод мне нужно реализовать, чтобы touch работал правильно?В настоящее время у меня есть следующий вывод:


$ touch m/My\ files/d3elete1.me 
touch: setting times of `m/My files/d3elete1.me': Invalid argument

Файл существует "d3elete1.me":


$ ls -l m/My\ files/d3elete1.me 
-rw-rw-rw- 1 root root 0 Jul 28 15:28 m/My files/d3elete1.me

Также я пытался отслеживать системные вызовы:


$ strace touch m/My\ files/d3elete1.me
...
open("m/My files/d3elete1.me", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_LARGEFILE, 0666) = 3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, NULL, 0)             = -1 EINVAL (Invalid argument)
close(0)                                = 0
...

Как видите utimensat не удалось.Я пытался реализовать пустые utimens и utime , но его даже не вызывали.

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Попробуйте запустить предохранитель с опцией -f. Предохранитель останется на переднем плане, и вы увидите ошибки в консоли.

1 голос
/ 28 июля 2010

Вы должны реализовать utimens и getattr. Не все системные вызовы обязательно отображаются непосредственно на вызовы C, которые вы могли ожидать. Многие из них используются FUSE для проверки вашей файловой системы и навигации по ней, в зависимости от того, какие параметры FUSE установлены.

Я полагаю, что в вашем случае FUSE предшествует интерпретации от utimesat до utimens с проверкой getattr для проверки наличия запрошенного файла и наличия ожидаемых атрибутов.

Update0

Это большое совпадение. Ниже приведен комментарий о том, что проблема нравится тем, что FUSE не поддерживает utimensat. Это не дело. У меня была та же трассировка, которую вы предоставили при использовании fuse-python в Ubuntu 10.04. Я немного покопался, может показаться, что привязки fuse-python 0.2 предназначены для FUSE 2.6, возможно, небольшое изменение внесло эту ошибку (FUSE теперь в версии 2.8). Мое решение состояло в том, чтобы прекратить использовать fuse-python (код - ужасный беспорядок), и я нашел альтернативную привязку fusepy . Я не оглядывался назад и не испытывал никаких проблем с тех пор.

Я настоятельно рекомендую вам взглянуть, ваш код инициализации будет чище, и для адаптации к новой привязке требуются минимальные изменения. Лучше всего, это всего один модуль, и его легко читать.

...