>[оверквотинг удален]
>>Еще раз подчеркиваю
>>клиент1: statfs inode, open(O_APPEND); sleep
>>клиент2: open(,O_APPEND); write, exit;
>>клиент1: write, exit
>>по времени эти 2 действия не пересекаются - только i_size обновляется асинхронно.
>>
>>такая последовательность действий запрещена с точки зрения pohmelfs ?
>
>Печально... Запустите этот код параллельно в двух потоках, только в один из
>них добавьте lseek().
причем тут lseek?
>[оверквотинг удален]
>>>поток может вызвать lseek() и переписать указатель, откуда надо делать write().
>>>Для этого и изобрели pwrite() и остальных (собственно, они и используются
>>>в pohmelfs server).
>>
>>в случае люстры - 2 клиента могут писать в EOF последовательно и
>>это будет работать.
>>у вас это запрещено - ок, запишем.
>
>Вы не видите ошибки в этом коде, печально... sys_write() работает со смещением,
>а не с размером иноды.
ээ.. можно уточнить в каком из ядер вдруг появилось смещение?
asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count)
из 2.6.24.
Пишется буфер, позиция берется из f_pos, которая на момент open(,O_APPEND) берется из i_size - все согластно POSIX.
>
>Тем не менее обновление метаданных работает совершенно по тому же самому механизму,
>что и инвалидация страниц. Это я про i_size, права доступа, uig/gid
>(наверное нужно atime) и т.п. Собственно для этого есть структура, сильно
>напоминающая ту, что заполняет stat(2).
хотел бы я посмотреть на rpc трафик в этом случае. ну да лана.
>[оверквотинг удален]
>>дай бог что бы она поддерживала хотя бы такую как есть в
>>локальном VFS, пока и ее нету.
>
>Я так полагаю, вы в этом сомневаетесь :)
>
>>Я лиш пытаюсь показать подводные камни на этом пути, да и немного
>>- не совсем привычных use case которые тем немеение существуют.
>
>Нет, вы пытаетесь показать, что это не удастся. Но вы не правы
>:)
да ну? я лиш показал некоторые use case на которые надо обратить внимание :)
и которые в текущей реализации сделаны "никак".