假设同时有两个进程looking up一个文件,并且此文件在dcache中尚不存在。这两个查找将向进程返回NULL(dentry)。
我的问题是Linux内核如何确保在dentry查找失败后,它只创建一个dentry?
答案 0 :(得分:0)
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
的创建方式。