Основной функционал по работе с SMB2 протоколом принят в апстрим (http://bugs.etersoft.ru/show_bug.cgi?id=6517#c62). Далее надо реализовать необходимые оставшиеся части: 1) установку блокировок 2) установка атрибутов файла 3) монтирование с prefixpath опцией.
Выяснилось, что SMB2 патчи требуют анализа большего количества человек и уже слишком поздно для включения их в ядро 3.2. Провёл rebase с последними изменениями от Стива Френча и отправил в рассылку под версией 2.
Сделал rebase c v3.2-rc5. Проанализировал полученные замечания. Провёл начальную реорганизацию коммитов. Убрал лишний код. Проверил собираемость. Ветка: http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev2
Занимался рефакторингом патчей согласно подходу обсуждённому в рассылке: вводить новые структуры не разом, а в процессе их использования. Для этого пришлось перерабатывать первые патчи, что вызвало множество конфликтов слияния, которые были исправлены. Провёл rebase с v3.2-rc6. Протестировал чтение/запись. Ветка: http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev5
Работал над задачей: продолжил процесс переноса кода из ранних патчей в те, где он реально используется, тестировал код.
Перенёс код в ветку: http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev
Работал над задачей разбивки патчей. Последний код тут: http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev2
Продолжил работу над патчами: 1) Разбил патч монтирования. 2) Переписал патч переустановки соединения. 3) Переупорядочил. Послений код тут: http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev
Работал над задачей: 1) раскидал файл smb2misc.c в существующие файлы. 2) поправил патчи, сделал их более логически связанными. Осталось раскидать патч "CIFS: Add structure definitions for SMB2 PDUs".
Занимался патчем "CIFS: Add structure definitions for SMB2 PDUs" - выкинул лишнее, разбил на составляющие и объединил части с остальными патчами.
Работал над задачей: 1) Переписал smb2readdir.c на основе текущего кода readdir для cifs. 2) Переименовал функции *UCS* в *UTF16*, что правильнее отражает кодировку, используемую протоколом. 3) Правки стиля.
Правил патчи. Разобрался с проблемой неосвобождения кэша после чтения директории. http://git.etersoft.ru/people/piastry/packages/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-dev
Разбирался с проблемой ошибки чтения/записи в случае соединения с подписью. Исправил ошибки, поправил код. Протестировал данный функионал.
Продолжил работу над задачей. 1) Правил стиль патчей. 2) Тестировал чтение/запись на LAN и WI-FI вариантах с подписью и без.
Работал над задачей. 1) Локализовал проблему некорректности прочитанных данных при кратковременном (10-20 сек) разрыве сети. 2) Переписал код переустановки соединения, согласно существующему коду для CIFS протокола. 3) Поправил стиль патчей для прохождения checkpatch.pl проверок. Подготовил и отправил первый патч, который меняет имена функций *UCS* в *UTF16*.
Тестировал полученный функционал SMB2 модуля.
Провёл более детальное тестирование, внес некоторые правки. Патч из http://bugs.etersoft.ru/show_bug.cgi?id=7816#c14 приняли в апстрим.
Просмотрел патчи перед отправкой (50 штук), поправил некоторые стилевые ошибки. Отправил в рассылку на ревью.
Получил комментарии по патчам. Занимался следующими задачами: 1) Прокинул коммиты конфига/опции монтирования вначало серии. 2) Перешёл на подобие credit-based flow control для CIFS. 3) Продумал и переписал функции транспортного уровня, сделав их общими для CIFS и SMB2. 4) Прочие исправления.
Продолжил работу над патчами: привёл в порядок код приёма сообщений + сделал некоторые правки в транспортном уровне. Разбил патчи на три группы: 1) CIFS-only патчи, подготавливающие код для добавления поддержки SMB2. 2) SMB2 код отправки/приёма сообщений, рабочая команда монтирования. 3) Прочие команды. В дальнейшем, можно будет поделить патчи последней группы на более мелкие.
Работал с первой группой патчей. Добавил патч для cifs_readv_receive, поправил существующие. Тестировал на стабильность.
Провёл тестирование как патчей первой группы, так и всех сразу. Отправил в рассылку патчи первой группы.
Разбирался с проблемой появление WARNING в dmesg ошибку в коде mkdir/rmdir в случае, когда POSIX расширения выключены. В случае POSIX при каждой новой поддиректории в родительской директории увеличивается nlink. В случае выключенных расширений на сервере этого не делается, а на клиенте делалось. В результате, при обновлении параметров айнода nlink сбрасывался, а потом при rmdir уменьшался в сторону отрицательных значений. Исправил ошибку, изменяя nlink только в случае POSIX. Отправил в рассылку.
Добавил возможность для CIFS обрабатывать MaxMpxCount значение для negotiate (означающее, сколько клиент может послать запросов одновременно).
Работал над патчами, связанными с MaxMpxCount (ветка cifs-patches): переосмыслил семантику, реализовал, провёл тестирование. Далее планирую провести более подробное тестирование.
Протестировал и отправил в рассылку (11 патчей).
Провёл rebase относительно апстрим для cifs-patches и для smb2-dev относительно cifs-patches (исправил работу с кредитами и прочий код транспортного уровня). Занимался поиском баги, из-за которой для SMB2 после umount модуль оставался занятым и не выгружался. Локализовал и исправил: ошибка была в коде чтения сожержимого директории (воспроизводится с помощью Connectathon Test Suite basic test #6) и заключалась в постоянном увеличении счётчика ссылок на соединение к шаре при инициализации чтения директории. После исправления, тест проходит. Далее планирую провести более тщательно тестирования полученного функионала. Также планируется добиться прохождения такого же количества тестов basic, general и special, как и CIFS.
Провёл дополнительное тестирование. Исправил багу, поправил код.
Добавил поддержку файловых блокировок для SMB2. Далее планирую провести более тщательное тестирование полученного функционала.
Тестировал SMB2 блокировки с помощью Connectathon Test Suite - исправил некоторые неточности и добился работы всех тестов, кроме #10 (на CIFS так же - из-за ограничению семантики блокировок). Так же возникли проблемы с тестом #14 - отдельно он работает, а после теста #13 (mmap) нет, из-за незакрытия файлового дескриптора -> неудаления файла (падает на open).
Проверил собираемость, просмотрел и отправил в рассылку патчи из ветки cifs-patches.
На основе дискуссии в рассылке начал переработку патчей.
(В ответ на comment #32) > На основе дискуссии в рассылке начал переработку патчей. Подготовил и отправил патчи в рассылку.
Начал работу над реорганизацией кода inode операций для последующего переиспользования кода в SMB2. Переработал mkdir.
Работал с текущими патчами - подготавливал для принятия в апстрим. Так же обсудил свои соображения по выделения протоколо-зависимых частей кода в структуры с набором протоколо-специфичных операций.
Подготовил и отправил первую партию патчей SMB2 (Get SMB2 mount work).
Провёл rebase SMB2 патчей на текущий master (в который добавились асинхронная запись в режиме strictcache, новый разбор строки опций монтирования и более мелкие изменения). Провёл рефакторинг кода операций чтения/записи. Протестировал код. Исправил ошибку потери опции forcemand в новом коде разбора строки опций монтирования.
Провёл rebase на текущий master. Обновил ветки.
(В ответ на comment #38) > Провёл rebase на текущий master. Обновил ветки. Провёл rebase на текущую ветку for-next для CIFS. Провёл обширное тестирование, выявил и исправил ошибки.
Перевёл lock патчи на новый подход: когда мы имеем отдельную структуру для протоколо-специфичных операцию (котора устанавливается в момент установки соединения), что делает основной код протоколо-независымым.
(В ответ на comment #40) > Перевёл lock патчи на новый подход: когда мы имеем отдельную структуру для > протоколо-специфичных операцию (котора устанавливается в момент установки > соединения), что делает основной код протоколо-независымым. lock патчи в for-next в апстрим. Продолжил работать над переводом кода CIFS на новую архитектуру: работал над патчами транспортного уровня + провел rebase SMB2 патчей на получившийся код.
Работал над проблемой пропуска lease break сообщений полученных сразу после открытия файла на сервере - клиент не успевает инициализировать файловую структуру и код поиска соответствующего дескриптора для обработки сообщения ничего не находит. Решил следующим образом: завёл список текущих открытий, в котором хранится информация об открытии пока не успее инициализироваться структура файла. Код обработки break сообщения проверяет сначала список файловых струтур, а потом список текущих открытий. В случае нахождения в последнем обновляется информация о lease и потом при инициализации эта информацию заполняется в файловую структуру. Завёл ветку для работы над leases: http://git.altlinux.org/people/piastry/public/?p=cifs-2.6.git;a=shortlog;h=refs/heads/smb2-leases
Подготовил патчи, протестировал и отправил.
Работал над патчами.
Разбирался с ошибками конвертации litte/big endian.
Разбирался с проблемой утечки памяти в SMB2 коде.
Работал над патчами: исправил возможное user-after-free в процессе установки соединения, изменил код ops->close - теперь возвращает void, отправил патчи в рассылку.
Поскольку все патчи приняты в v3.7-rc1, бага следует считать закрытой.