Bug 4155

Summary: Сохранение из 1С 8.1 на CIFS не работает
Product: [Внутреннее (Etersoft)] Отдел тестирования Reporter: Vitaly Lipatov <lav>
Component: Assignee: Pavel Shilovsky <piastry>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3 CC: amorozov, baraka, lav, night, sin, yurifil
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 10580, 11003, 9561 Связано с:
Дата напоминания:
Bug Depends on: 4370    
Bug Blocks: 3043, 3044, 4201, 4284    

Description Vitaly Lipatov 2009-07-29 19:34:07 MSD
На сервере:
samba-3.0.32_2,1:
FreeBSD filesrv.intty.pvt 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan 1
14:37:25 UTC 2009 

На клиенте:
CentOS 5.2, ядро 2.6.18 из обновлений к системе
etercifs 4.3.6, WINE@Etersoft 1.0.10
1С 8.1.13.* клиент-серверная

Проблемы при сохранении файлов из 1С 8.1.

При попытке пользователя сохранить документ (из 1С) на
samba-ресурс файл создаётся с правами root:root 644, при том, что
монтируется ресурс с параметрами file_mask=0666,dir_mask=0777.
При добавлении параметра монтирования setuids 1С сообщает об ошибке сохранения (хотя файл создаётся, но при этом его размер равен 16Kb ровно, внутри - 0x00).

Возможн это проблема с OLE? Один из случае: при сохранении
файла из 1С 8.1 файл создался с правами 666 root:root,
однако, размером ровно 1536 байт (должен был быть файл MS
Excel), состоящий полностью из 0x00. В логах wine
следующее:
...
fixme:storage:StgCreateDocfile Storage share mode not
implemented.
fixme:storage:StgCreateDocfile Transacted mode not
implemented.
err:virtual:map_file_into_view shared writable mmap not
supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view
0xd5f0000 1000 000000000 failed
err:storage:ImplBIGBLOCKFILE_WriteAt Unable to get a page
to write. This should never happen
err:virtual:map_file_into_view shared writable mmap not
supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view
0xd5f0000 1000 000000000 failed
err:storage:ImplBIGBLOCKFILE_WriteAt Unable to get a page
to write. This should never happen
err:virtual:map_file_into_view shared writable mmap not
supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view
0xd5f0000 1000 000000000 failed

Копирование файлов средствами OS вроде как проходит нормально.
Comment 1 Vitaly Lipatov 2009-07-29 19:56:28 MSD
У меня пока гипотезы 3:
1. Ошибка в работе 1С 8.1 (некорректно сохраняет именно в таком раскладе) - странно то, что локально с сохранением проблем нет. В логах не очень хорошие сообщения на тему сохранения.
2. Нечто в используемой samba, влияющее на etercifs
3. Особые параметры монтирования на клиенте
Comment 2 Vitaly Lipatov 2009-07-30 22:23:40 MSD
Установил samba3:

# pkg_fetch samba3
--->  Fetching samba3
/var/tmp/portupgraded02Wz9IN/samba3.tbz       100% of   26 MB  326 kBps 00m00s
--->  Downloaded as samba3.tbz
--->  Identifying the package /var/tmp/portupgraded02Wz9IN/samba3.tbz
--->  Saved as /usr/ports/packages/All/samba-3.0.35,1.tbz

[root@freebsd /mnt/FreeBSD/7.2/usr/ports/net/samba3]# pkg_add -f /usr/ports/packages/All/samba-3.0.35,1.tbz

Но надо обновить все пакеты, я пока не знаю как.
Comment 3 Vitaly Lipatov 2009-07-30 22:24:34 MSD
Денис, предлагаю проверять в порядке согласно моему комментарию №1.
Comment 4 Юрий Филь 2009-07-31 16:15:17 MSD
порты обновляются утилитой portupgrade.

portupgrade -aP обновляет все порты, устанавливая бинарники, где возможно.
Comment 5 Юрий Филь 2009-07-31 16:31:57 MSD
сейчас /usr/ports хоста указывает на /mnt/FreeBSD/7.2/usr/ports с обновленными портами.
Comment 6 Денис Баранов 2009-07-31 19:37:09 MSD
FreeBSD отменяется.
Воспроизвести удалось в обычных условиях.
Открываем любой документ, Файл>Сохранить копию> Выбираем расширение .xls
В консоль валится следующее:
fixme:storage:StgCreateDocfile Storage share mode not implemented.
fixme:storage:StgCreateDocfile Transacted mode not implemented.
err:virtual:map_file_into_view shared writable mmap not supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view 0x10330000 1000 000000000 failed
err:storage:ImplBIGBLOCKFILE_WriteAt Unable to get a page to write. This should never happen
err:virtual:map_file_into_view shared writable mmap not supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view 0x10330000 1000 000000000 failed
err:storage:ImplBIGBLOCKFILE_WriteAt Unable to get a page to write. This should never happen
err:virtual:map_file_into_view shared writable mmap not supported, broken filesystem?
err:virtual:NtMapViewOfSection map_file_into_view 0x10330000 1000 000000000 failed
Comment 7 Денис Баранов 2009-07-31 19:43:34 MSD
WINE@Etersoft 1.0.11 eter5.1/eter3 
etercifs 4.3.8
Comment 8 Денис Баранов 2009-07-31 20:05:42 MSD
Самый легкий способ воспроизведения: Файл>Новый>Табличный документ, заполняем его, далее Файл>Сохранить копию> Выбираем расширение .xls, выбираем созранение на CIFS-ресурс.

Проверено что на NFS-ресурс сохраняется корректно, локально тоже все хорошо.

Так же по прошествии некоторого времени файлы начинают корректно сохраняться.
Comment 9 Александр Морозов 2009-10-08 19:49:50 MSD
При монтировании с параметрами noperm,forcemand сохранение работает, а с noperm,forcemand,direct не работает (настройки samba и версии ядер и etercifs те же, что в баге 4346). Проблема в том, что без direct есть проблемы с 1С 7.7.

Судя по сообщению
err:virtual:map_file_into_view shared writable mmap not supported, broken
filesystem?
дело в mmap. Вот такая тестовая программа:

#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    void *addr;
    int fd;

    if (argc != 2)
    {
        fprintf(stderr, "Using: %s filename\n", argv[0]);
        return 1;
    }

    fd = open(argv[1], O_RDWR, 0640);
    if (fd < 0)
    {
        perror("open");
        return 1;
    }
    addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (addr != MAP_FAILED)
    {
        puts("mmap OK");
        munmap(addr, 4096);
    }
    else
    {
        perror("mmap");
    }
    close(fd);

    return 0;
}

при монтировании с noperm,forcemand,direct выводит:
mmap: No such device
Comment 10 Александр Морозов 2009-10-08 20:00:25 MSD
С noperm,forcemand,direct,brl сохранение тоже не работает.
Comment 11 Vitaly Lipatov 2009-11-20 16:40:23 MSK
Я так понимаю, что всё идёт к тому, чтобы режим монтирования CIFS для баз (совместной работы с WINE) и для обычной работы был разный...
Надо ли проверять, какая ситуация на 4.4.1 (сборки имеются)?
Comment 12 Pavel Shilovsky 2009-11-25 23:34:46 MSK
Это та же проблема, что и в 4370. С параметром direct CIFS просто не знает такой операции, как mmap, потому работа многих приложений, таких как openoffice, gedit не корректна. С 1С 8.1 такая же ситуация. Патч из баги 4370 решает эту проблему.
Comment 13 Денис Баранов 2010-01-08 17:41:36 MSK
etercifs 4.4.1 eter1
Проблема решена.
Comment 14 Vitaly Lipatov 2010-01-08 18:33:14 MSK
Какая проблема и каким образом решена?
Что именно стало работать для тебя?
Comment 15 Денис Баранов 2010-01-08 18:58:58 MSK
MOUNT_OPTIONS=user=guest,pass=,rw,iocharset=utf8,noperm,forcemand,direct
Сохранение и открытие файлов на CIFS ресурсе работает корректно.
etercifs 4.4.1 eter1
Comment 16 Vitaly Lipatov 2010-01-15 19:04:43 MSK
Считаём решённым в релизе WINE@E 1.0.12