假设有两个过程同时查找文件,并且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
的创建方式。