Linux内核如何处理并发文件查找



假设有两个过程同时查找文件,并且dcache中还不存在此文件。这两个查找将返回null(Dentry)到该过程。

我的问题是,Linux内核如何确保在失败的Dentry查找后,它仅会产生一个Dentry?

1912 /**
1913  * d_lookup - search for a dentry
1914  * @parent: parent dentry
1915  * @name: qstr of name we wish to find
1916  * Returns: dentry, or NULL
1917  *
1918  * d_lookup searches the children of the parent dentry for the name in
1919  * question. If the dentry is found its reference count is incremented and the
1920  * dentry is returned. The caller must use dput to free the entry when it has
1921  * finished using it. %NULL is returned if the dentry does not exist.
1922  */

d_lookup不会自己创建任何dentry对象。看一下do_filp_open逻辑,并显示了dentries的创建方式。

最新更新