【问题标题】:How does Linux kernel handle the concurrent file lookupLinux内核如何处理并发文件查找
【发布时间】:2012-10-16 18:42:34
【问题描述】:

假设同时有两个进程looking up一个文件,而这个文件在dcache中还不存在。这两个查找将向进程返回 NULL (dentry)。

我的问题是,Linux 内核如何确保在失败的 dentry 查找后,它只创建一个 dentry?

【问题讨论】:

    标签: concurrency filesystems linux-kernel


    【解决方案1】:
    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 是如何创建的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多