/* zfcp_adapter_release - remove the adapter from the resource list  pointer to struct kref locks: adapter list write lock is assumed to be held by caller  */
void zfcp_adapter_release(struct kref *ref)
/* zfcp_adapter_release - remove the adapter from the resource list  pointer to struct kref locks: adapter list write lock is assumed to be held by caller  */
void zfcp_adapter_release(struct kref *ref)
{
	struct zfcp_adapter *adapter = container_of(ref, struct zfcp_adapter,
						    ref);
	struct ccw_device *cdev = adapter->ccw_device;
	dev_set_drvdata(&adapter->ccw_device->dev, NULL);
	zfcp_fc_gs_destroy(adapter);
	zfcp_free_low_mem_buffers(adapter);
	kfree(adapter->req_list);
	kfree(adapter->fc_stats);
	kfree(adapter->stats_reset_data);
	kfree(adapter);
	put_device(&cdev->dev);
}