kfree(sl); 
static int w1_control(void *data){	struct w1_slave *sl, *sln;	struct w1_master *dev, *n;	int err, have_to_wait = 0;	daemonize("w1_control");	allow_signal(SIGTERM);	while (!control_needs_exit || have_to_wait) {		have_to_wait = 0;		try_to_freeze();		msleep_interruptible(w1_timeout * 1000);		if (signal_pending(current))			flush_signals(current);		list_for_each_entry_safe(dev, n, &w1_masters, w1_master_entry) {			if (!control_needs_exit && !dev->flags)				continue;			/*			 * Little race: we can create thread but not set the flag.			 * Get a chance for external process to set flag up.			 */			if (!dev->initialized) {				have_to_wait = 1;				continue;			}			if (control_needs_exit) {				set_bit(W1_MASTER_NEED_EXIT, &dev->flags);				err = kill_proc(dev->kpid, SIGTERM, 1);				if (err)					dev_err(&dev->dev,						 "Failed to send signal to w1 kernel thread %d.\n",						 dev->kpid);			}			if (test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) {				wait_for_completion(&dev->dev_exited);				spin_lock_bh(&w1_mlock);				list_del(&dev->w1_master_entry);				spin_unlock_bh(&w1_mlock);				list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {					list_del(&sl->w1_slave_entry);					w1_slave_detach(sl);					kfree(sl);				}				w1_destroy_master_attributes(dev);				atomic_dec(&dev->refcnt);				continue;			}			if (test_bit(W1_MASTER_NEED_RECONNECT, &dev->flags)) {				dev_info(&dev->dev, "Reconnecting slaves in device %s.\n", dev->name);				down(&dev->mutex);				list_for_each_entry(sl, &dev->slist, w1_slave_entry) {					if (sl->family->fid == W1_FAMILY_DEFAULT) {						struct w1_reg_num rn;						list_del(&sl->w1_slave_entry);						w1_slave_detach(sl);						memcpy(&rn, &sl->reg_num, sizeof(rn));						kfree(sl);						w1_attach_slave_device(dev, &rn);					}				}				clear_bit(W1_MASTER_NEED_RECONNECT, &dev->flags);				up(&dev->mutex);			}		}	}	complete_and_exit(&w1_control_complete, 0);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3aca692d3ec7cf89da4575f598e41f74502b22d7/w1.c/buggy/drivers/w1/w1.c