Summary: | Поддержка SMB2 протокола в CIFS модуле | ||
---|---|---|---|
Product: | CIFS@Etersoft | Reporter: | Pavel Shilovsky <piastry> |
Component: | прочее | Assignee: | Pavel Shilovsky <piastry> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P3 | CC: | lav, sin |
Version: | не указана | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 7815 | ||
Deadline: | 2012-09-30 |
Description
Pavel Shilovsky
2011-10-25 14:10:54 MSK
Выяснилось, что 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, бага следует считать закрытой. |