Текущий CIFS не позволяет корректно реализовать работу с блокировками в WINE. Сейчас при закрытии файлового дескриптора происходит сброс блокировок (как по POSIX). В Windows это не происходит, пока не будет закрыт последний соответствующий файлу дескриптор. WINE может действовать двумя способами: 1. Оставлять Linux-дескриптор открытым, пока Windows-программа не закроет последний дескриптор. При этом возникают проблемы с повторным открытием файлов. Допустим, мы открываем файл с GENERIC_WRITE и FILE_SHARE_READ|FILE_SHARE_WRITE, получаем дескриптор 1. Затем открываем его с GENERIC_READ и FILE_SHARE_WRITE, получаем дескриптро 2, закрываем дескриптор 2. Теперь мы не сможем открыть его с GENERIC_READ ещё раз. 2. Закрывать Linux-дескриптор сразу при закрытии файла Windows-программой. Тогда не будет проблем с повторным открытием файлов, но будут сбрасываться блокировки. Как видно, корректно реализовать работу с блокировками в WINE не получается. Предлагаю изменить поведение CIFS так, чтобы при открытии файла так, как это делает WINE (с дополнительными флагами, сообщающими о режимах FILE_SHARE*), закрытие дескриптора не приводило к сбросу блокировок. Для файлов, открытых без дополнительных флагов, можно оставить сброс блокировок, как это предполагает POSIX.
Возможно будет проще привязать нужное нам поведение к какому-то параметру монтирования (возможно, новому). В любом случае поведением POSIX/не POSIX по поводу закрытия дескрипторов стоит иметь возможность управлять. Ожидается, что исправление будет в версии etercifs 4.3.8, сборка WINE@Etersoft будет требовать версию не ниже. Сделать нужно как можно скорее, это задерживает релиз.
Собрал etercifs-4.3.8. В сборке etercifs-4.3.8-alt3 исправил выявленные после пересборки ошибки на legacy и 2.6.29 ядрах. Перезалил умерщвлённый недавно репозиторий: http://git.etersoft.ru/people/sin/packages/cifs-2.6.git Актуальные ветки наших ядер: legacy-etercifs legacy-centos52-etercifs (сейчас идентичен legacy-etercifs) legacy-centos53-etercifs v2.6.16-etercifs (на деле, это legacy для suse) v2.6.23-etercifs v2.6.24-etercifs v2.6.25-etercifs v2.6.26-etercifs v2.6.27-etercifs v2.6.28-etercifs v2.6.29-etercifs v2.6.30-etercifs Аткуальные ветки с нашими патчами (в привязке к тегу v2.6.30) etersoft-common etersoft-mkdir etersoft-getflk etersoft-share-flags-etercifs Дополнительные ветки с нашими патчами: etersoft-posix-locks-etercifs etersoft-posix-locks etersoft-to-kernel etersoft-share-flags etersoft-oplocks etersoft-include