首页 > 解决方案 > 重启后linux内核中消失的dentries

问题描述

我正在尝试通过内核创建一大块 vfs,这个函数在我的模块中创建目录。我的代码看起来:

struct dentry   *dentry;
struct path     path;
int             err, lookup;

lookup = LOOKUP_DIRECTORY | LOOKUP_REVAL;
mode |= S_IFDIR;

dentry = kern_path_create(AT_FDCWD, name, &path, lookup);
if (IS_ERR(dentry))
{
    return PTR_ERR(dentry);
}

err = vfs_mkdir(d_inode(path.dentry), dentry, mode);
if (err)
{
    
}

done_path_create(&path, dentry);
return err;

重启前

f1 <- 目录

f2 <- 目录(子目录 f1)

f3 <- 目录(子目录 f1)

重新启动后 vfs 树在 struct dentry 中消失。

f1 <- 目录

为了得到这个输出,我使用了:

err = kern_path(FULL_MAIN_DIR_NAME, LOOKUP_FOLLOW, &tmp_root);
     printk(KERN_DEBUG "%s <- dir\n",tmp_root.dentry->d_name.name );

    list_for_each_entry(tmp_dentry, &tmp_root.dentry->d_subdirs, d_child)
    {
        if (tmp_dentry->d_name.name)
        {
            printk(KERN_INFO "%s <- dir (subdir f1)\n", tmp_dentry->d_name.name);
        }    
    }

但是系统中仍然存在目录,我可以正常使用它们。另一方面,附加到它们的 struct inode_operations 也会被清除。有人知道如何解决这个问题吗?

标签: linuxlinux-kernelkernelvfs

解决方案


推荐阅读