【ganesha】函数ceph_fsal_open2解析

函数ceph_fsal_open2解析

定义说明:

enum fsal_create_mode {
	FSAL_NO_CREATE = 0,
	FSAL_UNCHECKED = 1,
	FSAL_GUARDED = 2,
	FSAL_EXCLUSIVE = 3,
	FSAL_EXCLUSIVE_41 = 4,
	FSAL_EXCLUSIVE_9P,
};

表格说明:

模式 说明
FSAL_NO_CREATE  不应创建新对象,仅尝试打开已存在文件。
FSAL_UNCHECKED 忽略目标是否存在,直接尝试创建。NFSv3 中的默认行为。
FSAL_GUARDED 若目标已存在则返回错误,确保不会覆盖已有文件
FSAL_EXCLUSIVE 用于 NFSv3 中的 EXCLUSIVE 模式,要求创建时带有 verifier(校验值)以避免重放攻击

区分不同:

模式 文件不存在时行为 文件存在时行为
FSAL_UNCHECKED 创建 打开并可能设置属性
FSAL_GUARDED 创建 失败(不能存在)
FSAL_EXCLUSIVE 创建(带 verifier) 失败
FSAL_EXCLUSIVE_41 创建(带属性+verifier) 失败
FSAL_NO_CREATE 失败(不创建) 打开

 

 

1. FSAL_NO_CREATE使用场景:比如在 nfs4_op_open() 中,判断客户端请求的 create 类型为 OPEN4_NOCREATE(即只打开,不创建),那么就会这样调用:

fsal_open(..., FSAL_NO_CREATE, ...)

表示:只允许打开,不允许新建。FSAL_NO_CREATE 是一个安全保护用的 create_mode 值,确保操作不会误触发对象创建。如果你在调试 FSAL 插件或处理 NFSv4 的 OPEN,看到这个模式就代表请求是仅打开,不创建”。

2. 

 来源背景:NFSv4.1 的 OPEN 语义
在 NFSv4 协议中,OPEN 有一个 open_claim_type 字段,可以表示不同的声明类型,比如:

  • CLAIM_NULL
  • CLAIM_PREVIOUS
  • CLAIM_DELEGATE_CUR

当使用 CLAIM_NULL 并且 OPEN4args.createmode == EXCLUSIVE4_1 时,客户端会提交一个 create_verf 和属性集合。这个语义在 Ganesha 中会被翻译成 FSAL_EXCLUSIVE_41。

模式 校验 Verifier 设置属性 语义来自
FSAL_EXCLUSIVE ✅ 是 ❌ 否 NFSv3
FSAL_EXCLUSIVE_41 ✅ 是 ✅ 是 NFSv4.1
posted @ 2018-06-24 15:57  苏格拉底的落泪  阅读(168)  评论(0)    收藏  举报