Skip to content
Advertisement

Where is file_lock stored in Linux

I’m reading the Understand the Linux Kernel book, and it says that the list of file_lock is stored in the file’s inode (of field i_flock).

But in the sys_flock() of Linux 2.6.11.12, which will eventually call flock_lock_file(). It uses filp->f_dentry->d_inode->i_flock to get the list of file_lock and filp->f_dentry is an dentry of the directory which “contains” the file.

JavaScript

Suppose that the file_lock list are linked with filp->f_dentry->d_inode->i_flock, What will happen when a hard link exists:

JavaScript

and file_link is a hard link to file.txt

When we use this two path to open the same file, sys_open() will set filp->f_dentry to foo and bar separately, isn’t it? If my guess is right, how file_lock can work?

Advertisement

Answer

The file_lock is indeed stored in the inode of the corresponding file.

An inode can be referred by several directory entries, which linked in inode’s i_dentry field. Even for a unique file might have different filp->f_dentry, filp->f_dentry->d_inode is all refer to the same inode.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement