Bug 4132

Summary: Невозможно корректно реализовать работу с блокировками в WINE
Product: CIFS@Etersoft Reporter: Александр Морозов <amorozov>
Component: блокировки файлов и доступAssignee: Евгений Синельников <sin>
Status: CLOSED FIXED QA Contact:
Severity: critical    
Priority: P1 CC: lav
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3589, 4118    

Description Александр Морозов 2009-07-23 20:03:33 MSD
Текущий 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.
Comment 1 Vitaly Lipatov 2009-07-23 20:43:52 MSD
Возможно будет проще привязать нужное нам поведение к какому-то параметру монтирования (возможно, новому). В любом случае поведением POSIX/не POSIX по поводу закрытия дескрипторов стоит иметь возможность управлять.
Ожидается, что исправление будет в версии etercifs 4.3.8, сборка WINE@Etersoft будет требовать версию не ниже.
Сделать нужно как можно скорее, это задерживает релиз.
Comment 2 Евгений Синельников 2009-07-28 16:20:00 MSD
Собрал 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