【问题标题】:Impossible to delete file in debugfs无法在 debugfs 中删除文件
【发布时间】:2021-04-28 08:53:15
【问题描述】:

我在玩 debugfs。在一个模块中,我在 debugfs 文件系统(安装在 /sys/kernel/debug)中创建了一个目录“test_debugfs”和一个文件“demo_file”。

// Create the test_debufs in /sys/kernel/debug
struct dentry * my_dirent;
static int __init my_module_init_module(void) {
    my_dirent = debugfs_create_dir("test_debugfs", NULL);
    debugfs_create_file("demo_file", 0666, my_dirent, NULL, &fops_debugfs);
}

不幸的是,我忘记删除模块卸载时的目录,现在我无法删除 demo_file

# rmmod my_module
# cd /sys/kernel/debug/test_debugfs
# ls
demo_file
# rm -rf demo_file
rm: cannot remove 'demo_file': Operation not permitted
# sstat
  File: demo_file
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 6h/6d   Inode: 16426       Links: 1
Access: (0666/-rw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-04-28 10:20:14.807999989 +0200
Modify: 2021-04-28 10:20:14.807999989 +0200
Change: 2021-04-28 10:20:14.807999989 +0200
 Birth: -

重新启动我的机器后,demo_file 仍然存在。

你知道我怎样才能删除它吗?

回答: 感谢 Varun,我设法使用以下代码直接在模块中删除了文件:

struct dentry * my_dirent;
static int __init my_module_init_module(void) {
    struct path path;
    ret = kern_path("/sys/kernel/debug/test_debugfs", LOOKUP_DIRECTORY, &path);
    if (ret)
         pr_err("Failed to lookup /sys/kernel/debug/test_debugfs err %d\n", ret);
    else
        debugfs_remove_recursive(path.dentry);
}

【问题讨论】:

    标签: linux linux-kernel filesystems


    【解决方案1】:

    您不能使用 rm 命令从 debug_fs 中删除文件 ..

    debugfs 文件系统不支持目录inode 操作中的unlink 功能。因此 rm 命令将失败

    你必须使用 debugfs function void debugfs_remove(struct dentry *dentry) 其中 dentry 参数是 debugfs_create_file 函数调用的返回值

    【讨论】:

    • 感谢您的帮助,我直接在模块初始化函数中删除了文件,它可以工作!
    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2011-11-03
    • 2014-02-07
    相关资源
    最近更新 更多