while (atomic_read(&sl->refcnt)) { printk(KERN_INFO "Waiting for %s to become free: refcnt=%d.\n", sl->name, atomic_read(&sl->refcnt));  if (msleep_interruptible(1000)) flush_signals(current); } 
list_del(&sl->w1_slave_entry); 
static void w1_slave_detach(struct w1_slave *sl){	struct w1_netlink_msg msg;	dev_info(&sl->dev, "%s: detaching %s.\n", __func__, sl->name);	while (atomic_read(&sl->refcnt)) {		printk(KERN_INFO "Waiting for %s to become free: refcnt=%d.\n",				sl->name, atomic_read(&sl->refcnt));		if (msleep_interruptible(1000))			flush_signals(current);	}	if (sl->family->fops && sl->family->fops->remove_slave)		sl->family->fops->remove_slave(sl);	sysfs_remove_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id);	device_remove_file(&sl->dev, &w1_slave_attr_name);	device_unregister(&sl->dev);	w1_family_put(sl->family);	sl->master->slave_count--;	memcpy(&msg.id.id, &sl->reg_num, sizeof(msg.id.id));	msg.type = W1_SLAVE_REMOVE;	w1_netlink_send(sl->master, &msg);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3aca692d3ec7cf89da4575f598e41f74502b22d7/w1.c/buggy/drivers/w1/w1.c