Bug 6441

Summary: Не работает ограничение на число процессов, работающих с файлом
Product: CIFS@Etersoft Reporter: Александр Морозов <amorozov>
Component: блокировки файлов и доступAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact: Александр Морозов <amorozov>
Severity: normal    
Priority: P4 CC: piastry
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3043    

Description Александр Морозов 2010-11-12 18:12:42 MSK
Создал пять wineprefix`ов, с помощью такого скрипта запускаю пять процессов, открывающих один файл на CIFS-разделе:

#! /bin/sh
xterm -e 'WINEPREFIX="${HOME}/.wine" wine open_file.exe' &
xterm -e 'WINEPREFIX="${HOME}/wine_test_2" wine open_file_2.exe' &
xterm -e 'WINEPREFIX="${HOME}/wine_test_3" wine open_file_3.exe' &
xterm -e 'WINEPREFIX="${HOME}/wine_test_4" wine open_file_4.exe' &
xterm -e 'WINEPREFIX="${HOME}/wine_test_5" wine open_file_5.exe' &
echo -n "Enter smth:"
read
WINEPREFIX="${HOME}/.wine" wineserver -k
WINEPREFIX="${HOME}/wine_test_2" wineserver -k
WINEPREFIX="${HOME}/wine_test_3" wineserver -k
WINEPREFIX="${HOME}/wine_test_4" wineserver -k
WINEPREFIX="${HOME}/wine_test_5" wineserver -k

open_file.c:
#include <windows.h>
#include <stdio.h>

int main()
{
    FILE *f = fopen("test", "w+");
    printf("opening \"test\": %s\n", f ? "ok" : "failed");
    SuspendThread(GetCurrentThread());
}

В лицензии:
TYPE_LICENSE=Terminal
COUNT_LICENSE=3
Но при этом файл может быть успешно открыт и больше чем тремя процессами (четырьмя или пятью, когда как).
На NFS ограничение на число файлов работает.

etercifs-4.5.3-alt1
2.6.32-std-def-alt16 #1 SMP
wine-etersoft-sql-1.0.12-alt14.1
wine-etersoft-1.0.12-alt7.25
Comment 1 Александр Морозов 2010-11-12 18:21:54 MSK
На CIFS F_GETLK вместо pid процесса, установившего блокировку, возвращает pid процесса, выполняющего F_GETLK. Есть тест: cifs/getlk.c в репозитории git.office:/projects/wine-etersoft-devel.git
Comment 2 Pavel Shilovsky 2010-11-12 19:20:35 MSK
Это известная проблема и средствами CIFS её решить нельзя из-за ограничений самого протокола. Нужен какой-то другой механизм без использования поля pid в возвращаемой структуре GET_LK.
Comment 3 Александр Морозов 2010-12-02 21:33:59 MSK
Сделал, чтобы в set_concurlock не использовалось F_GETLK. Изменения внесены в открытую (отправлены патчи в wine-patches-test) и закрытую части.
Comment 4 Александр Морозов 2011-07-12 19:38:54 MSK
> В лицензии:
> TYPE_LICENSE=Terminal
> COUNT_LICENSE=3
Успешно открываются только 3 файла.

Клиент: Debian 5.0.6 x64(fixed) в vbox
etercifs              4.5.5-eter3debian
2.6.26-2-amd64 #1 SMP
wine-etersoft-network 1.0.12-eter18debian
wine-etersoft         1.0.12-eter8.14debian

Сервер: cellar
2.6.32-ovz-el-alt25 #1 SMP
samba-3.5.9-alt1