Linux 内核文件系统与设备操作流程分析(22) { struct vfsmount *mnt = nd->mnt; // // 从 hlist 中获取 struct dentry 结构,hlist 代表的是 // 一个 inode 的缓存即是一个 HASH 表。 // struct dentry *dentry = __d_lookup(nd->dentry, name); // // 如果没有找到则会调用 real_lookup() 实际文件系统方法 // 从磁盘中获取 // if (!dentry) goto need_lookup; if (dentry->d_op && dentry->d_op->d_revalidate) goto need_revalidate;done: // // 如果从缓存中找到,则设置 struct path 并返回 // path->mnt = mnt; path->dentry = dentry; __follow_mount(path); return 0;need_lookup: // // 使用实际文件系统方法,从磁盘中获得 inode 信息 // dentry = real_lookup(nd->dentry, name, nd); if (IS_ERR(dentry)) goto fail; goto done;need_revalidate: dentry = do_revalidate(dentry, nd); // // 这里是缓存的分之。如果 struct dentry 无效还是需要调