if (request->cpaddr != NULL) kfree(request->cpaddr); 
kfree(request->cpaddr); 
tape_alloc_request(int cplength, int datasize){	struct tape_request *request;	if (datasize > PAGE_SIZE || (cplength*sizeof(struct ccw1)) > PAGE_SIZE)		BUG();	DBF_LH(6, "tape_alloc_request(%d, %d)\n", cplength, datasize);	request = (struct tape_request *) kmalloc(sizeof(struct tape_request),						  GFP_KERNEL);	if (request == NULL) {		DBF_EXCEPTION(1, "cqra nomem\n");		return ERR_PTR(-ENOMEM);	}	memset(request, 0, sizeof(struct tape_request));	/* allocate channel program */	if (cplength > 0) {		request->cpaddr = kmalloc(cplength*sizeof(struct ccw1),					  GFP_ATOMIC | GFP_DMA);		if (request->cpaddr == NULL) {			DBF_EXCEPTION(1, "cqra nomem\n");			kfree(request);			return ERR_PTR(-ENOMEM);		}		memset(request->cpaddr, 0, cplength*sizeof(struct ccw1));	}	/* alloc small kernel buffer */	if (datasize > 0) {		request->cpdata = kmalloc(datasize, GFP_KERNEL | GFP_DMA);		if (request->cpdata == NULL) {			DBF_EXCEPTION(1, "cqra nomem\n");			if (request->cpaddr != NULL)				kfree(request->cpaddr);			kfree(request);			return ERR_PTR(-ENOMEM);		}		memset(request->cpdata, 0, datasize);	}	DBF_LH(6, "New request %p(%p/%p)\n", request, request->cpaddr,		request->cpdata);	return request;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/17fd682e544556a2a829e94383239c029bb21c5e/tape_core.c/clean/drivers/s390/char/tape_core.c