Такая вот проблема: есть сервер с самбой, клиент с linux-2.6 с ядрёной
smbfs. Каталог экспортируется самбой и монтируется этим клиентом. На
клиенте 2 процесса параллельно с некоторой периодичностью проверяют
содержимое одного из файлов с сервера (файл маленький, меньше
килобайта) и в соответствии с тем, что там записано, выполняют некие
действия. Этот файл обновляется также по smb, но с другого хоста. Так
вот: когда на "клиенте" эти 2 процесса работают параллельно, через
некоторое время этот файл как будто "замораживается" в состоянии,
которое он имел на некоторый момент времени, и последующие попытки
чтения его всё время возвращают старое содержимое, даже после того,
как он обновился на сервере. Это состояние сохраняется и далее, даже
если прибить процессы - на клиенте файл не обновляется. На сервере при
этом содержимое файла обновляется нормально, связь клиента с сервером
тоже сохраняется (если на сервере создать новый файл - клиент его
увидит; но вот обновление "проблемного" файла - не воспринимает).
Судя по всему, проблема возникает, когда два процесса на клиенте
пытаются открыть этот файл одновременно - если запустить только один
из них, то всё работает без проблем. Проблем не возникает также если
smb-ресурс с упомянутым файлом смонтировать 2 раза в разные каталоги,
и разным процессам указать этот файл в них - тогда и при параллельном
доступе всё работает нормально. Файл открывается только на чтение
(std::ifstream(filename)).
Ещё после такого "замораживания" smbstatus на сервере показывает вот
это (pusk - это тот самый файл):
Locked files:
Pid DenyMode Access R/W Oplock SharePath Name
--------------------------------------------------------------------------------
--------
17416 DENY_NONE 0x12019f RDWR NONE /tmp/test pusk Sun May 13 19:26:12 2007
Этот файл так там и остаётся висеть пока не отмонтировать каталог.
На клиенте при этом lsof не показывает чтобы этот файл был открыт.
Пытался крутить разные параметры самбы, связанные с блокировкой
(oplock-и, режимы блокировки) - не помогает. Что ещё странно: если в
качестве сервера используется не самба, а оффтопик, то всё работает
без проблем.
В чём тут может быть дело? Это нормальное поведение или баг?
И если баг - то чего (ядрёного smbfs или самбы)?
Re: Samba<=>Linux: странное поведение кэширования?
Ну лок надо полагать вешает система которая смонтировала шару через smbfs (те два процесса в принципе лишь косвенно это дело спровоцировали). Я так понимаю что система не может нормально разрулить множественный доступ к смонтированной шаре.
Я бы, если честно, монтировал как cifs, а потом бы начинал искать грабли.