Linux 内核文件系统与设备操作流程分析(21) // err = do_lookup(nd, &this, &next); if (err) break; ......last_with_slashes: lookup_flags = LOOKUP_FOLLOW LOOKUP_DIRECTORY;last_component: /* Clear LOOKUP_CONTINUE iff it was previously unset */ nd->flags &= lookup_flags ~LOOKUP_CONTINUE; ....... // // 这里是去掉了 LOOKUP_CONTINUE 标志后,又调用了一次。 // err = do_lookup(nd, &this, &next); if (err) break; ...... } path_release(nd);return_err: return err;}到这里才是查找对应 struct dentry 的具体操作,此函数首先从缓存中尝试获取struct dentry 结构。如果获取失败,则调用 real_lookup() 函数使用实际文件系统方法来读取 inode 信息。这里要明确 struct dentry 中包含了 struct inode信息。static int do_lookup(struct nameidata *nd, struct qstr *name, struct path *path)