塊層對永續性預留的支援¶
Linux 核心支援一個使用者空間介面,用於簡化永續性預留,這些預留對映到支援它們的塊裝置(如 SCSI)。永續性預留允許在共享儲存設定中,限制對塊裝置的訪問,使其僅限於特定的發起方。
本文件概述了支援的 ioctl 命令。有關更詳細的參考,請查閱 SCSI Primary Commands 標準,特別是關於預留的部分以及“PERSISTENT RESERVE IN”和“PERSISTENT RESERVE OUT”命令。
所有實現都應確保預留能在斷電後繼續存在,並涵蓋多路徑環境中的所有連線。這些行為在 SPC 中是可選的,但 Linux 將自動應用它們。
支援以下型別的預留:¶
- PR_WRITE_EXCLUSIVE
只有擁有預留的發起方才能寫入裝置。任何發起方都可以從裝置讀取。
- PR_EXCLUSIVE_ACCESS
只有擁有預留的發起方才能訪問裝置。
- PR_WRITE_EXCLUSIVE_REG_ONLY
只有持有註冊金鑰的發起方才能寫入裝置,任何發起方都可以從裝置讀取。
- PR_EXCLUSIVE_ACCESS_REG_ONLY
只有持有註冊金鑰的發起方才能訪問裝置。
PR_WRITE_EXCLUSIVE_ALL_REGS
只有持有註冊金鑰的發起方才能寫入裝置,任何發起方都可以從裝置讀取。所有持有註冊金鑰的發起方都被視為預留持有者。如果想使用此型別,請參考 SPC 規範中關於預留持有者的定義。
- PR_EXCLUSIVE_ACCESS_ALL_REGS
只有持有註冊金鑰的發起方才能訪問裝置。所有持有註冊金鑰的發起方都被視為預留持有者。如果想使用此型別,請參考 SPC 規範中關於預留持有者的定義。
支援以下 ioctl:¶
1. IOC_PR_REGISTER¶
如果 new_key 引數非空,此 ioctl 命令將註冊一個新的預留。如果不存在現有預留,old_key 必須為零;如果現有預留應被替換,old_key 必須包含舊的預留金鑰。
如果 new_key 引數為 0,它將登出 old_key 中傳入的現有預留。
2. IOC_PR_RESERVE¶
此 ioctl 命令預留裝置,並根據 type 引數限制其他裝置的訪問。key 引數必須是裝置現有的預留金鑰,該金鑰透過 IOC_PR_REGISTER、IOC_PR_REGISTER_IGNORE、IOC_PR_PREEMPT 或 IOC_PR_PREEMPT_ABORT 命令獲取。
3. IOC_PR_RELEASE¶
此 ioctl 命令釋放由 key 和 flags 指定的預留,從而移除其隱含的任何訪問限制。
4. IOC_PR_PREEMPT¶
此 ioctl 命令釋放 old_key 引用的現有預留,並將其替換為針對預留金鑰 new_key 的新型別預留。
5. IOC_PR_PREEMPT_ABORT¶
此 ioctl 命令的作用類似於 IOC_PR_PREEMPT,但它還會中止透過 old_key 標識的連線傳送的任何未完成命令。
6. IOC_PR_CLEAR¶
此 ioctl 命令登出 key 和任何其他已註冊到裝置的預留金鑰,並解除任何現有預留。
標誌¶
所有 ioctl 都有一個標誌欄位。目前只支援一個標誌
- PR_FL_IGNORE_KEY
忽略現有的預留金鑰。這通常受 IOC_PR_REGISTER 支援,並且某些實現可能支援 IOC_PR_RESERVE 的此標誌。
對於所有未知標誌,核心將返回 -EOPNOTSUPP。