Bug 7874

Summary: Блокируются файлы на cifs-разделе
Product: CIFS@Etersoft Reporter: Александр Морозов <amorozov>
Component: блокировки файлов и доступAssignee: Pavel Shilovsky <piastry>
Status: CLOSED LATER QA Contact:
Severity: minor    
Priority: P4 CC: lav, olezha
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3043    
Deadline: 2014-12-31   

Description Александр Морозов 2011-11-16 21:47:02 MSK
Собираем утилиту busytest из cifs/busytest.c в репозитории git.office:/projects/wine/wine-etersoft-devel.git

Монтируем cifs-раздел так:
mount -t cifs //winxp/Rarus /mnt/cifs -o user=guest,pass=,rw,iocharset=utf8,noperm,wine
или так:
mount -t cifs //winxp/Rarus /mnt/cifs -o user=guest,pass=,rw,iocharset=utf8,noperm,strictcache,forcemand
winxp - машина с Windows XP

Запускаем на cifs-разделе и нажимаем Ctrl-C после появления третьей звёздочки:
$ ./busytest fy
* * * ^C

После этого файл не открывается:
$ cat fy
cat: fy: Текстовый файл занят

Файл начинает открываться только после перемонтирования раздела.
Воспроизводится на машинах atlant (3.0.6-std-def-alt1) и euclid (3.0.7-std-def-alt1). На обоих стоит etercifs-5.1.4-alt1.
Comment 1 Pavel Shilovsky 2011-11-17 14:52:25 MSK
Это раньше работало на предыдущих ядрах?
Comment 2 Александр Морозов 2011-11-17 15:01:13 MSK
На 2.6.32-ovz-el-alt38 с etercifs-5.1.2-alt1 проблемы нет.
Comment 3 Pavel Shilovsky 2011-11-21 22:15:22 MSK
Проблема существует с ядра 2.6.38. Возникает она потому, что теперь в данном ядре изменился режим обработки сообщений: ждём ответ от сервера беконечно и тестируем его echo запросами; в случае, если сервер не отвечает на echo запросы, переустанавливаем соединение. Это изменения повлекло за собой то, что цикл ожидания ответа от сервера можно прервать (раньше он только сам прерывался после выставленного таймаута). Теперь, когда мы прерываем операцию, на сервер отсылается nt_cancel сообщение и оно не всегда успевает добраться до сервера раньше, чем тот ответит на запрос.

amorozov, данная проблема проявляется в реальной работе приложений или это было случайно поймано на синтетических тестах?

Как решение, можно сделать специальный хак, что если мы получаем open response и не находим объекта ожидающего данный пакет, то конструируем запрос на закрытие. Такому же поведению отвечает команда установки блокировки.
Comment 4 Александр Морозов 2011-11-21 23:21:16 MSK
> amorozov, данная проблема проявляется в реальной работе приложений или это было
> случайно поймано на синтетических тестах?
Тест синтетический. В реальной работе такого пока не видел.
Comment 5 Pavel Shilovsky 2014-10-15 10:28:56 MSK
lav@, пока выставляю здесь решена (отложена надолго),
Comment 6 Олег Шевченко 2024-04-15 20:03:26 MSK
Закрыта.