zfcp_san_dbf_event_els_request(fsf_req);  
zfcp_fsf_send_els(struct zfcp_send_els *els){	volatile struct qdio_buffer_element *sbale;	struct zfcp_fsf_req *fsf_req;	fc_id_t d_id;	struct zfcp_adapter *adapter;	unsigned long lock_flags;        int bytes;	int ret = 0;	d_id = els->d_id;	adapter = els->adapter;        ret = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS,				  ZFCP_REQ_AUTO_CLEANUP,				  NULL, &lock_flags, &fsf_req);	if (ret < 0) {                ZFCP_LOG_INFO("error: creation of ELS request failed "			      "(adapter %s, port d_id: 0x%08x)\n",                              zfcp_get_busid_by_adapter(adapter), d_id);                goto failed_req;	}	sbale = zfcp_qdio_sbale_req(fsf_req, fsf_req->sbal_curr, 0);        if (zfcp_use_one_sbal(els->req, els->req_count,                              els->resp, els->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(&els->req[0]);                sbale[2].length = els->req[0].length;                sbale[3].addr = zfcp_sg_to_address(&els->resp[0]);                sbale[3].length = els->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,                                                els->req, els->req_count,                                                ZFCP_MAX_SBALS_PER_ELS_REQ);                if (bytes <= 0) {                        ZFCP_LOG_INFO("error: creation of ELS request failed "				      "(adapter %s, port d_id: 0x%08x)\n",				      zfcp_get_busid_by_adapter(adapter), d_id);                        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,                                                els->resp, els->resp_count,                                                ZFCP_MAX_SBALS_PER_ELS_REQ);                if (bytes <= 0) {                        ZFCP_LOG_INFO("error: creation of ELS request failed "				      "(adapter %s, port d_id: 0x%08x)\n",				      zfcp_get_busid_by_adapter(adapter), d_id);                        if (bytes == 0) {                                ret = -ENOMEM;                        } else {                                ret = bytes;                        }                        goto failed_send;                }                fsf_req->qtcb->bottom.support.resp_buf_length = bytes;        } else {                /* reject request */		ZFCP_LOG_INFO("error: microcode does not support chained SBALs"                              ", ELS request too big (adapter %s, "			      "port d_id: 0x%08x)\n",			      zfcp_get_busid_by_adapter(adapter), d_id);                ret = -EOPNOTSUPP;                goto failed_send;        }	/* settings in QTCB */	fsf_req->qtcb->bottom.support.d_id = d_id;	fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class;	fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT;	fsf_req->data = (unsigned long) els;	sbale = zfcp_qdio_sbale_req(fsf_req, fsf_req->sbal_curr, 0);	/* start QDIO request for this FSF request */	ret = zfcp_fsf_req_send(fsf_req, els->timer);	if (ret) {		ZFCP_LOG_DEBUG("error: initiation of ELS request failed "			       "(adapter %s, port d_id: 0x%08x)\n",			       zfcp_get_busid_by_adapter(adapter), d_id);		goto failed_send;	}	ZFCP_LOG_DEBUG("ELS request initiated (adapter %s, port d_id: "		       "0x%08x)\n", zfcp_get_busid_by_adapter(adapter), d_id);	goto out; failed_send:	zfcp_fsf_req_free(fsf_req); 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/8a36e4532ea10471f0a8605207d071361d7be2c3/zfcp_fsf.c/clean/drivers/s390/scsi/zfcp_fsf.c