通过debugfs_rename 修改已经存在的debugfs的目录的name

本文详细介绍了如何在debugfs文件系统中为bonding模块创建和管理调试目录,包括创建、重命名目录及文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般我们通过下面的code来创建一个名为bongding的debugfs的入口
void bond_create_debugfs(void)
{
    bonding_debug_root = debugfs_create_dir("bonding", NULL);

    if (!bonding_debug_root) {
        pr_warn("Warning: Cannot create bonding directory in debugfs\n");
    }
}

得到bonding_debug_root 后,可以通过debugfs_create_dir 在bonding 目录下再新建一级目录。然后通过debugfs_create_file 在这个第二级目录下新建一个rlb_hash_table的文件,这个文件的权限0400。关联的操作的是bond_debug_rlb_hash_fops
void bond_debug_register(struct bonding *bond)
{
    if (!bonding_debug_root)
        return;

    bond->debug_dir =
        debugfs_create_dir(bond->dev->name, bonding_debug_root);

    if (!bond->debug_dir) {
        netdev_warn(bond->dev, "failed to register to debugfs\n");
        return;
    }

    debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir,
                bond, &bond_debug_rlb_hash_fops);
}

这个时候加入我想修改bond->debug_dir,就可以调用debugfs_rename函数,这个函数会返回一个dentry,然后将返回的dentry保存在需要改变的bond->debug_dir 中就行了.
static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, struct dentry *new_dir, char *new_name)

void bond_debug_reregister(struct bonding *bond)
{
    struct dentry *d;

    if (!bonding_debug_root)
        return;

    d = debugfs_rename(bonding_debug_root, bond->debug_dir,
               bonding_debug_root, bond->dev->name);
    if (d) {
        bond->debug_dir = d;
    } else {
        netdev_warn(bond->dev, "failed to reregister, so just unregister old one\n");
        bond_debug_unregister(bond);
    }
}
最终看到的结果就是bond->debug_dir 这个目录的名字被改为bond->dev->name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值