put_device(dev); if (error) break; } up_read(&drv->bus->subsys.rwsem); 
klist_iter_exit(&i); 
int driver_for_each_device(struct device_driver * drv, struct device * start, 			   void * data, int (*fn)(struct device *, void *)){	struct list_head * head;	struct device * dev;	int error = 0;	down_read(&drv->bus->subsys.rwsem);	head = &drv->devices;	dev = list_prepare_entry(start, head, driver_list);	list_for_each_entry_continue(dev, head, driver_list) {		get_device(dev);		error = fn(dev, data);		put_device(dev);		if (error)			break;	}	up_read(&drv->bus->subsys.rwsem);	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/94e7b1c5ff2055571703e38b059afffe17658432/driver.c/buggy/drivers/base/driver.c