#ifdef CONFIG_CISS_SCSI_TAPE kfree(hba[i]->scsi_rejects.complete); #endif 
static void __devexit cciss_remove_one (struct pci_dev *pdev){	ctlr_info_t *tmp_ptr;	int i, j;	char flush_buf[4];	int return_code; 	if (pci_get_drvdata(pdev) == NULL)	{		printk( KERN_ERR "cciss: Unable to remove device \n");		return;	}	tmp_ptr = pci_get_drvdata(pdev);	i = tmp_ptr->ctlr;	if (hba[i] == NULL) 	{		printk(KERN_ERR "cciss: device appears to "			"already be removed \n");		return;	}	/* Turn board interrupts off  and send the flush cache command */	/* sendcmd will turn off interrupt, and send the flush...	* To write all data in the battery backed cache to disks */	memset(flush_buf, 0, 4);	return_code = sendcmd(CCISS_CACHE_FLUSH, i, flush_buf, 4, 0, 0, 0, NULL,				TYPE_CMD);	if(return_code != IO_OK)	{		printk(KERN_WARNING "Error Flushing cache on controller %d\n", 			i);	}	free_irq(hba[i]->intr, hba[i]);	pci_set_drvdata(pdev, NULL);	iounmap(hba[i]->vaddr);	cciss_unregister_scsi(i);  /* unhook from SCSI subsystem */	unregister_blkdev(hba[i]->major, hba[i]->devname);	remove_proc_entry(hba[i]->devname, proc_cciss);			/* remove it from the disk list */	for (j = 0; j < NWD; j++) {		struct gendisk *disk = hba[i]->gendisk[j];		if (disk->flags & GENHD_FL_UP) {			del_gendisk(disk);			blk_cleanup_queue(disk->queue);		}	}	pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof(CommandList_struct),			    hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);	pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof( ErrorInfo_struct),		hba[i]->errinfo_pool, hba[i]->errinfo_pool_dhandle);	kfree(hba[i]->cmd_pool_bits); 	release_io_mem(hba[i]);	free_hba(i);}	
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3da8b713da723e78a03f0404beedf3cc6f4f860b/cciss.c/clean/drivers/block/cciss.c