fsf_req->data.send_ct = ct; 
fsf_req->data = (unsigned long) ct; 
zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool,		 struct zfcp_erp_action *erp_action){	volatile struct qdio_buffer_element *sbale;	struct zfcp_port *port;	struct zfcp_adapter *adapter;        struct zfcp_fsf_req *fsf_req;        unsigned long lock_flags;        int bytes;	int ret = 0;	port = ct->port;	adapter = port->adapter;	ret = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_GENERIC,				  ZFCP_WAIT_FOR_SBAL | ZFCP_REQ_AUTO_CLEANUP,				  pool, &lock_flags, &fsf_req);	if (ret < 0) {                ZFCP_LOG_INFO("error: Could not create CT request (FC-GS) for "			      "adapter: %s\n",			      zfcp_get_busid_by_adapter(adapter));		goto failed_req;	}        if (erp_action != NULL) {                erp_action->fsf_req = fsf_req;                fsf_req->erp_action = erp_action;        }	sbale = zfcp_qdio_sbale_req(fsf_req, fsf_req->sbal_curr, 0);        if (zfcp_use_one_sbal(ct->req, ct->req_count,                              ct->resp, ct->resp_count)){                /* both request buffer and response buffer                   fit into one sbale each */                sbale[0].flags |= SBAL_FLAGS0_TYPE_WRITE_READ;                sbale[2].addr = zfcp_sg_to_address(&ct->req[0]);                sbale[2].length = ct->req[0].length;                sbale[3].addr = zfcp_sg_to_address(&ct->resp[0]);                sbale[3].length = ct->resp[0].length;                sbale[3].flags |= SBAL_FLAGS_LAST_ENTRY;        } else if (adapter->supported_features &                   FSF_FEATURE_ELS_CT_CHAINED_SBALS) {                /* try to use chained SBALs */                bytes = zfcp_qdio_sbals_from_sg(fsf_req,                                                SBAL_FLAGS0_TYPE_WRITE_READ,                                                ct->req, ct->req_count,                                                ZFCP_MAX_SBALS_PER_CT_REQ);                if (bytes <= 0) {                        ZFCP_LOG_INFO("error: creation of CT request failed "				      "on adapter %s\n",				      zfcp_get_busid_by_adapter(adapter));                        if (bytes == 0)                                ret = -ENOMEM;                        else                                ret = bytes;                        goto failed_send;                }                fsf_req->qtcb->bottom.support.req_buf_length = bytes;                fsf_req->sbale_curr = ZFCP_LAST_SBALE_PER_SBAL;                bytes = zfcp_qdio_sbals_from_sg(fsf_req,                                                SBAL_FLAGS0_TYPE_WRITE_READ,                                                ct->resp, ct->resp_count,                                                ZFCP_MAX_SBALS_PER_CT_REQ);                if (bytes <= 0) {                        ZFCP_LOG_INFO("error: creation of CT request failed "				      "on adapter %s\n",				      zfcp_get_busid_by_adapter(adapter));                        if (bytes == 0)                                ret = -ENOMEM;                        else                                ret = bytes;                        goto failed_send;                }                fsf_req->qtcb->bottom.support.resp_buf_length = bytes;        } else {                /* reject send generic request */		ZFCP_LOG_INFO(			"error: microcode does not support chained SBALs,"                        "CT request too big (adapter %s)\n",			zfcp_get_busid_by_adapter(adapter));                ret = -EOPNOTSUPP;                goto failed_send;        }	/* settings in QTCB */	fsf_req->qtcb->header.port_handle = port->handle;	fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class;	fsf_req->qtcb->bottom.support.timeout = ct->timeout;        fsf_req->data.send_ct = ct;	/* start QDIO request for this FSF request */	ret = zfcp_fsf_req_send(fsf_req, ct->timer);	if (ret) {		ZFCP_LOG_DEBUG("error: initiation of CT request failed "			       "(adapter %s, port 0x%016Lx)\n",			       zfcp_get_busid_by_adapter(adapter), port->wwpn);		goto failed_send;	}	ZFCP_LOG_DEBUG("CT request initiated (adapter %s, port 0x%016Lx)\n",		       zfcp_get_busid_by_adapter(adapter), port->wwpn);	goto out; failed_send:	zfcp_fsf_req_free(fsf_req);        if (erp_action != NULL) {                erp_action->fsf_req = NULL;        } failed_req: out:        write_unlock_irqrestore(&adapter->request_queue.queue_lock,				lock_flags);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/059c97d0434834d291eff94669ca2dd3eaac9d28/zfcp_fsf.c/clean/drivers/s390/scsi/zfcp_fsf.c