kernfs_link_sibling
来源:互联网 发布:iphone移动数据快速 编辑:程序博客网 时间:2024/06/15 05:32
文件/fs/kernfs/dir.c
/**
* kernfs_link_sibling - 链接kernfs_node到sibling rbtree(兄弟红黑树)上
* @kn: kernfs_node of interest
*
* Link @kn into its sibling rbtree which starts from
* @kn->parent->dir.children.
*
* Locking:
* mutex_lock(kernfs_mutex)
*
* RETURNS:
* 成功返回0,失败返回 -EEXIST
*/
static int kernfs_link_sibling(struct kernfs_node *kn)
{
struct rb_node **node = &kn->parent->dir.children.rb_node;
struct rb_node *parent = NULL;
if (kernfs_type(kn) == KERNFS_DIR)
kn->parent->dir.subdirs++;
while (*node) {
struct kernfs_node *pos;
int result;
pos = rb_to_kn(*node);
parent = *node;
result = kernfs_sd_compare(kn, pos);
if (result < 0)
node = &pos->rb.rb_left;
else if (result > 0)
node = &pos->rb.rb_right;
else
return -EEXIST;
}
/* add new node and rebalance the tree */
rb_link_node(&kn->rb, parent, node);
rb_insert_color(&kn->rb, &kn->parent->dir.children);
return 0;
}
#define rb_to_kn(X) rb_entry((X), struct kernfs_node, rb)
文件/include/linux/rbtree.h
#define rb_entry(ptr, type, member) container_of(ptr, type, member)
莫名其妙就跑到红黑树的源码里面去了,好吧,下次再也不能说我不知道红黑树是个什么东西了,具体实现还是放到以后研究,总之从感性上来看,红黑树是一个高性能的二叉树
文件/fs/kernfs/dir.c
static int kernfs_sd_compare(const struct kernfs_node *left,
const struct kernfs_node *right)
{
return kernfs_name_compare(left->hash, left->name, left->ns, right);
}
static int kernfs_name_compare(unsigned int hash, const char *name,
const void *ns, const struct kernfs_node *kn)
{
if (hash != kn->hash)
return hash - kn->hash;
if (ns != kn->ns)
return ns - kn->ns;
return strcmp(name, kn->name);
}
关于红黑树的实现,可以参考http://kerneltravel.net/jiaoliu/kern-rbtree.html
这里才总算是把该kobject加入到了sysfs中.
- kernfs_link_sibling
- Android中Preference的使用以及监听事件分析
- 网络虚拟化技术
- Light OJ 1334 Genes in DNA KMP+DP
- POJ训练计划3687_Labeling Balls(拓扑排序)
- 如何将Win8的默认窗口背景设为护眼色(彻底)
- kernfs_link_sibling
- Mongodb地理空间索引
- eclipse常用快捷键
- FindNextFile 蚊子132 给大家写一段通用的文件查找代码,非常简单明了
- 设置EditText不弹出键盘
- MySQL数据库MyISAM和InnoDB存储引擎的比较
- thinPHP使用自定义函数
- C#之委托(delegate)与事件(event)
- linux几种关机方法---学习笔记