Linux/shareflags
Этапы продвижения флагов совместного доступа к файлу в ядро 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: *").
Последние замечание/предложения:
1) Предложено добавить новый вызов openat2(), который будет проверять наличие поддержки в ядре для указанного флага и генерировать ошибку, если флаг не известен. В данном вызове можно увеличить поле флагов или сделать расширяемый список параметров, а также добавить новые флаги.
2) Предложено разбить патч #1 на два: а) исправление работы flock+LOCK_MAND для разделов, смонтированных с 'sharelock'; б) добавление флагов O_DENYREAD и O_DENYWRITE и их обработки в open.
3) Предложено перенести весь код O_DENYDELETE в отдельный файл.
Статус
Патчи не приняты, поэтому эта функциональность имеется только в модуле etercifs.