Linux/shareflags

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

Этапы продвижения флагов совместного доступа к файлу в ядро Linux

Багзилла

Флаги совместного доступа используются протоколами SMB/CIFS и NFSv4 для организации совместного доступа к файлу и возможности запрещения открытия такого файла другими процессами в определенных режимах. Поскольку данный флаги активно используются Wine приложениями для работы с файлами на сетевых ресурсах, необходима поддержка такого функционала в ядре Linux (в частности в модулях CIFS и NFS).

Оригинально в WinAPI используются три флага (CreateFile Function):

1) FILE_SHARE_READ - разрешает открытие файла на чтение.

2) FILE_SHARE_WRITE - разрешает открытие файла на запись.

3) FILE_SHARE_DELETE - разрешает удаление файла.

В файловой системе SMB/CIFS присутствуют все три вышеописанных флага, в то время как NFSv4 оперирует лишь первыми двумя.

Состояние дел:

1) Актуальная версия патчей для ядра v3.13-rc4 лежит здесь (начиная с патчей "VFS: *").

2) Обсуждение патчей.

Последние замечание/предложения:

1) Предложено добавить новый вызов openat2(), который будет проверять наличие поддержки в ядре для указанного флага и генерировать ошибку, если флаг не известен. В данном вызове можно увеличить поле флагов или сделать расширяемый список параметров, а также добавить новые флаги.

2) Предложено разбить патч #1 на два: а) исправление работы flock+LOCK_MAND для разделов, смонтированных с 'sharelock'; б) добавление флагов O_DENYREAD и O_DENYWRITE и их обработки в open.

3) Предложено перенести весь код O_DENYDELETE в отдельный файл.

Статус

Патчи не приняты, поэтому эта функциональность имеется только в модуле etercifs.