一般我们通过下面的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
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