kfree (seg); 
kfree(seg); 
__segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end){	struct dcss_segment *seg = kmalloc(sizeof(struct dcss_segment),			GFP_DMA);	int dcss_command, rc, diag_cc;	if (seg == NULL) {		rc = -ENOMEM;		goto out;	}	dcss_mkname (name, seg->dcss_name);	rc = query_segment_type (seg);	if (rc < 0)		goto out_free;	if (segment_exceeds_range(seg)) {		PRINT_WARN ("segment_load: not loading segment %s - exceeds"				" kernel mapping range\n",name);		rc = -ERANGE;		goto out_free;	}	if (segment_overlaps_storage(seg)) {		PRINT_WARN ("segment_load: not loading segment %s - overlaps"				" storage\n",name);		rc = -ENOSPC;		goto out_free;	}	if (segment_overlaps_others(seg)) {		PRINT_WARN ("segment_load: not loading segment %s - overlaps"				" other segments\n",name);		rc = -EBUSY;		goto out_free;	}	if (do_nonshared)		dcss_command = DCSS_LOADNSR;	else		dcss_command = DCSS_LOADNOLY;	diag_cc = dcss_diag(dcss_command, seg->dcss_name,			&seg->start_addr, &seg->end);	if (diag_cc > 1) {		PRINT_WARN ("segment_load: could not load segment %s - "				"diag returned error (%ld)\n",name,seg->end);		rc = dcss_diag_translate_rc (seg->end);		dcss_diag(DCSS_PURGESEG, seg->dcss_name,				&seg->start_addr, &seg->end);		goto out_free;	}	seg->do_nonshared = do_nonshared;	atomic_set(&seg->ref_count, 1);	list_add(&seg->list, &dcss_list);	rc = seg->vm_segtype;	*addr = seg->start_addr;	*end  = seg->end;	if (do_nonshared)		PRINT_INFO ("segment_load: loaded segment %s range %p .. %p "				"type %s in non-shared mode\n", name,				(void*)seg->start_addr, (void*)seg->end,				segtype_string[seg->vm_segtype]);	else		PRINT_INFO ("segment_load: loaded segment %s range %p .. %p "				"type %s in shared mode\n", name,				(void*)seg->start_addr, (void*)seg->end,				segtype_string[seg->vm_segtype]);	goto out; out_free:	kfree (seg); out:	return rc;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/b2325fe1b7e5654fac9e9419423aa2c58a3dbd83/extmem.c/buggy/arch/s390/mm/extmem.c