| Summary: | Не создаются файлы при использовании ядра 2.6.39-std-def-alt2.1 | ||
|---|---|---|---|
| Product: | CIFS@Etersoft | Reporter: | Александр Морозов <amorozov> |
| Component: | блокировки файлов и доступ | Assignee: | Pavel Shilovsky <piastry> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | major | ||
| Priority: | P4 | CC: | kondratyuk, lav, sin, sonner |
| Version: | не указана | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 3043, 3044 | ||
| Deadline: | 2011-09-05 | ||
Тест: cifs/lincifs4.c в репозитории git.office:/projects/wine/wine-etersoft-devel.git Проблема в следующем: в ядре 2.6.39 появился новый флаг, актуальный при открытии файла: +#ifndef O_PATH +#define O_PATH 010000000 +#endif + Данный флаг используется для того, чтобы получить дескриптор для чтения атрибутов файла и любые операции вроде read/write/lseek/ioct выдают на нём ошибку -EBADF. Соответственно, ((~0 & 7) << 21) его включает и получается, не то, что требуется. В данной ситуации видится только один выход - подвинуть наши флаги. Причём, лучше убрать их в самый конец, чтобы подольше избежать подобных ситуаций. Поэтому, данный вызов падает не только на CIFS, но и на всех ядерных файловых системах, так как обработка нового флага происходит в VFS. Обсудили с amorozov@ ситуацию. Надо будет согласовать изменения в CIFS и WINE, чтобы в последнем можно было различать какое смещение использовать. Написал письмо в devel@. Ответил в devel@. Поправил сдвиг с 21 на 28 во всех ветках в репозитории cifs-2.6. Обновил ветку master в репозитории etercifs. Собрал etericifs-5.0.0 с необходимыми исправлениями (сдвиг на 28). amorozov@, надо поправить соответствующий кода в wine. Решена. Добавил поддержку etercifs-5.0.0 в wine. Чтобы работало, надо собрать новую закрытую часть. Теперь работает. Ядро 2.6.39-std-def-alt2.1, etercifs-5.0.0-alt1. Монтирование производилось командой etermount //192.168.4.181/share /mnt/winxp 1.0.12-eter13.2/26 |
При использовании etercifs-4.8.2-alt1 и ядра 2.6.39-std-def-alt2.1 системный вызов open("testfile", O_RDWR | O_CREAT | O_NOCTTY | O_NONBLOCK | O_LARGEFILE | ((~0 & 7) << 21), 0666) завершается с ошибкой, если файла testfile не существует. Из-за этого возникают проблемы с работой 1С 8.1: trace:file:CreateFileW L"F:/base/1Cv8.1CL" GENERIC_READ GENERIC_WRITE creation 5 attributes 0x0 trace:file:RtlDosPathNameToNtPathName_U (L"F:/base/1Cv8.1CL",0x32dfb0,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"F:/base/1Cv8.1CL" 520 0x32dccc (nil)) trace:file:wine_nt_to_unix_file_name L"\\base\\1Cv8.1CL" not found in /home/amorozov/.wine/dosdevices/f:/base warn:file:CreateFileW Unable to create file L"F:/base/1Cv8.1CL" (status c0000034) trace:file:CreateFileW returning 0xffffffff trace:file:CreateFileW L"F:/base/1Cv8.1CL" GENERIC_READ GENERIC_WRITE creation 4 attributes 0x0 trace:file:RtlDosPathNameToNtPathName_U (L"F:/base/1Cv8.1CL",0x32dfb0,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"F:/base/1Cv8.1CL" 520 0x32dccc (nil)) trace:file:wine_nt_to_unix_file_name L"\\??\\F:\\base\\1Cv8.1CL" -> "/home/amorozov/.wine/dosdevices/f:/base/1Cv8.1CL" warn:file:CreateFileW Unable to create file L"F:/base/1Cv8.1CL" (status c000000f) trace:file:CreateFileW returning 0xffffffff При запуске на NFS файл создаётся: trace:file:CreateFileW L"C:/base/1Cv8.1CL" GENERIC_READ GENERIC_WRITE creation 5 attributes 0x0 trace:file:RtlDosPathNameToNtPathName_U (L"C:/base/1Cv8.1CL",0x32dfb0,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"C:/base/1Cv8.1CL" 520 0x32dccc (nil)) trace:file:wine_nt_to_unix_file_name L"\\base\\1Cv8.1CL" not found in /home/amorozov/.wine/dosdevices/c:/base warn:file:CreateFileW Unable to create file L"C:/base/1Cv8.1CL" (status c0000034) trace:file:CreateFileW returning 0xffffffff trace:file:CreateFileW L"C:/base/1Cv8.1CL" GENERIC_READ GENERIC_WRITE creation 4 attributes 0x0 trace:file:RtlDosPathNameToNtPathName_U (L"C:/base/1Cv8.1CL",0x32dfb0,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"C:/base/1Cv8.1CL" 520 0x32dccc (nil)) trace:file:wine_nt_to_unix_file_name L"\\??\\C:\\base\\1Cv8.1CL" -> "/home/amorozov/.wine/dosdevices/c:/base/1Cv8.1CL" trace:file:CreateFileW returning 0x404 Монтирование производилось командой etermount //192.168.4.181/share2 /mnt/winxp 192.168.4.181 - система Windows XP SP3 на virtualbox На ядре 2.6.32-5-686 (debian 6.0.2 x32 на virtualbox) проблемы нет.