down_read(&devices_subsys.rwsem); list_for_each_entry(child, &dev->children, node) { if((error = fn(child, data))) break; } up_read(&devices_subsys.rwsem); 
klist_iter_init(&parent->klist_children, &i); while ((child = next_device(&i)) && !error) error = fn(child, data); klist_iter_exit(&i); 
int device_for_each_child(struct device * dev, void * data,		     int (*fn)(struct device *, void *)){	struct device * child;	int error = 0;	down_read(&devices_subsys.rwsem);	list_for_each_entry(child, &dev->children, node) {		if((error = fn(child, data)))			break;	}	up_read(&devices_subsys.rwsem);	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/36239577cfb6b9a7c111209536b54200b0252ebf/core.c/buggy/drivers/base/core.c