if (setting) kfree(setting); 
kfree(setting); 
static int __ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set, int auto_remove){	ide_settings_t **p = (ide_settings_t **) &drive->settings, *setting = NULL;	down(&ide_setting_sem);	while ((*p) && strcmp((*p)->name, name) < 0)		p = &((*p)->next);	if ((setting = kzalloc(sizeof(*setting), GFP_KERNEL)) == NULL)		goto abort;	if ((setting->name = kmalloc(strlen(name) + 1, GFP_KERNEL)) == NULL)		goto abort;	strcpy(setting->name, name);	setting->rw = rw;	setting->read_ioctl = read_ioctl;	setting->write_ioctl = write_ioctl;	setting->data_type = data_type;	setting->min = min;	setting->max = max;	setting->mul_factor = mul_factor;	setting->div_factor = div_factor;	setting->data = data;	setting->set = set;		setting->next = *p;	if (auto_remove)		setting->auto_remove = 1;	*p = setting;	up(&ide_setting_sem);	return 0;abort:	up(&ide_setting_sem);	if (setting)		kfree(setting);	return -1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/6044ec8882c726e325017bd948aa0cd94ad33abc/ide.c/buggy/drivers/ide/ide.c