代码是:
static inline struct list_head * d_hash(struct dentry *parent, unsigned long hash)
{
hash += (unsigned long)parent / L1_CACHE_BYTES;
hash = hash^(hash>>D_HASHBITS)^(hash>>D_HASHBITS*2);
return dentry_hashtable + (hash & D_HASHMASK);
}
如何理解这个功能?
特别是,“hash = hash^(hash>>D_HASHBITS)^(hash>>D_HASHBITS*2);
”
谢谢
PS:代码形式为:http://lxr.oss.org.cn/source/fs/dcache.c?v=2.6.16#L885
答案 0 :(得分:0)
首先,您需要了解哈希函数及其使用原因。接下来,您需要知道dcache(目录缓存)应该做什么。从usenix.org:d-cache“在内存中保存一个表示文件系统目录结构的树。”基本元素称为d-entry
该函数返回指向列表的指针,并需要父dentry和hash。列表指针指向一个“桶”(wikipedia)条目,这些条目与提供的条目具有相同的哈希值(这必须单独搜索)。
您在评论中提到的行依赖于按位运算符(wikipedia)。 '^'是独家或','>>'是一个正确的转变,'&'是一个按位和。
这应该让你开始理解这个功能。你必须查找常量,例如“D_HASHBITS”。