hlist_for_each_rcu(node, head) { struct dentry *dentry; 
hlist_for_each_entry_rcu(dentry, node, head, d_hash) { 
struct dentry * __d_lookup(struct dentry * parent, struct qstr * name){	unsigned int len = name->len;	unsigned int hash = name->hash;	const unsigned char *str = name->name;	struct hlist_head *head = d_hash(parent,hash);	struct dentry *found = NULL;	struct hlist_node *node;	rcu_read_lock();		hlist_for_each_rcu(node, head) {		struct dentry *dentry; 		struct qstr *qstr;		dentry = hlist_entry(node, struct dentry, d_hash);		if (dentry->d_name.hash != hash)			continue;		if (dentry->d_parent != parent)			continue;		spin_lock(&dentry->d_lock);		/*		 * Recheck the dentry after taking the lock - d_move may have		 * changed things.  Don't bother checking the hash because we're		 * about to compare the whole name anyway.		 */		if (dentry->d_parent != parent)			goto next;		/*		 * It is safe to compare names since d_move() cannot		 * change the qstr (protected by d_lock).		 */		qstr = &dentry->d_name;		if (parent->d_op && parent->d_op->d_compare) {			if (parent->d_op->d_compare(parent, qstr, name))				goto next;		} else {			if (qstr->len != len)				goto next;			if (memcmp(qstr->name, str, len))				goto next;		}		if (!d_unhashed(dentry)) {			atomic_inc(&dentry->d_count);			found = dentry;		}		spin_unlock(&dentry->d_lock);		break;next:		spin_unlock(&dentry->d_lock); 	} 	rcu_read_unlock(); 	return found;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/665a7583f32ab5b3bfe7a4d88da506542f7cdd75/dcache.c/buggy/fs/dcache.c