我正在阅读了解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_dentry
和foo
,不是吗?如果我猜对了,bar
怎么办?
答案 0 :(得分:0)
@Cacheable(value="books", key="#isbn", unless="true")
void someBookMutatingOperation(String isbn, ...) { .. }
确实存储在相应文件的file_lock
中。
inode
可以由多个目录条目引用,这些目录条目链接在inode的inode
字段中。即使唯一文件可能有不同的i_dentry
,filp->f_dentry
也会引用相同的inode。