CurveFS rename 接口实现方案/dir1/file1 /dir2/file2,主要有 2 个步骤:(1) 删除 file1 的 dentry,(2) 增加 file2 的 dentry(该 dentry 的 inodeid 等同 file1 的 inode id)。 关于 rename 接口的实现,主要调研了 chubaofs 和 juicefs,而 rename 的实现难点主要在于其原子性的保证。 方案调研 Chubaofs chubaofs 来获取成功(一般用户 rename 返回失败后,有可能希望再次执行 rename 以获得成功) 步骤 4 出错,会导致 inode 有可能没办法被正常回收 (nlink 始终大于 0),恢复机制如下: 对于这一步出错,没有恢复机制,与 unlink 操作失败一样的处理(因为 dentry 删除了,而 inode 却没被回收,会被当成孤儿节点去处理) 如果采用 chubaofs 的方案,需要考虑以下问题: 以上的恢复进制如果没执行成功怎么办? dentry *p2) mutex_lock(&p1->d_sb->s_vfs_rename_mutex); // inode_lock_nested(p1->d_inode, I_MUTEX_PARENT); inode_lock_nested(p2->d_inode, I_MUTEX_PARENT2); ... vfs_rename() 步骤 4:当做孤儿节点来处理0 码力 | 15 页 | 555.93 KB | 6 月前3
共 1 条
- 1













