file_lock存储在Linux

时间:2015-12-14 04:52:33

标签: linux

我正在阅读了解Linux内核一书,它说明file_lock列表存储在文件的inode(字段i_flock)中。< / p>

但在sys_flock()的{​​{1}}中,最终会调用Linux 2.6.11.12。它使用flock_lock_file()获取filp->f_dentry->d_inode->i_flock列表,file_lock是“包含”文件的目录的filp->f_dentry

dentry

假设int flock_lock_file(struct file *filp, struct file_lock *new_fl) { // ... struct inode * inode = filp->f_dentry->d_inode; // ... } 列表与file_lock相关联,当存在硬链接时会发生什么:

filp->f_dentry->d_inode->i_flock

和file_link是file.txt的硬链接

当我们使用同一个文件/some_path/foo/file.txt /another_path/bar/file_link 的这两条路径时,open会将sys_open()分别设置为filp->f_dentryfoo,不是吗?如果我猜对了,bar怎么办?

1 个答案:

答案 0 :(得分:0)

@Cacheable(value="books", key="#isbn", unless="true") void someBookMutatingOperation(String isbn, ...) { .. } 确实存储在相应文件的file_lock中。

inode可以由多个目录条目引用,这些目录条目链接在inode的inode字段中。即使唯一文件可能有不同的i_dentryfilp->f_dentry也会引用相同的inode。