[SCSI] zfcp: Update FC pass-through support

Don't access the block layer request, get the payload length instead
from the FC job. Simplify access to the zfcp_port, only the d_id is
required, if the port is no longer accessed later. This is possible
when the els_handler does not access the port pointer from the ELS
request.

Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
Christof Schmitt 2009-05-15 13:18:22 +02:00 committed by James Bottomley
parent 9d544f2b9b
commit dc577d554a
2 changed files with 5 additions and 7 deletions

View File

@ -704,7 +704,7 @@ static void zfcp_fc_generic_els_handler(unsigned long data)
} }
reply->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK; reply->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK;
reply->reply_payload_rcv_len = blk_rq_bytes(job->req->next_rq); reply->reply_payload_rcv_len = job->reply_payload.payload_len;
out: out:
job->state_flags = FC_RQST_STATE_DONE; job->state_flags = FC_RQST_STATE_DONE;
@ -736,15 +736,12 @@ int zfcp_fc_execute_els_fc_job(struct fc_bsg_job *job)
read_lock_irq(&zfcp_data.config_lock); read_lock_irq(&zfcp_data.config_lock);
port = rport->dd_data; port = rport->dd_data;
if (port) if (port)
zfcp_port_get(port); els_fc_job->els.d_id = port->d_id;
read_unlock_irq(&zfcp_data.config_lock); read_unlock_irq(&zfcp_data.config_lock);
if (!port) { if (!port) {
kfree(els_fc_job); kfree(els_fc_job);
return -EINVAL; return -EINVAL;
} }
els_fc_job->els.port = port;
els_fc_job->els.d_id = port->d_id;
zfcp_port_put(port);
} else { } else {
port_did = job->request->rqst_data.h_els.port_id; port_did = job->request->rqst_data.h_els.port_id;
els_fc_job->els.d_id = (port_did[0] << 16) + els_fc_job->els.d_id = (port_did[0] << 16) +
@ -772,8 +769,8 @@ static void zfcp_fc_generic_ct_handler(unsigned long data)
job->reply->reply_data.ctels_reply.status = ct_fc_job->ct.status ? job->reply->reply_data.ctels_reply.status = ct_fc_job->ct.status ?
FC_CTELS_STATUS_REJECT : FC_CTELS_STATUS_OK; FC_CTELS_STATUS_REJECT : FC_CTELS_STATUS_OK;
job->reply->reply_payload_rcv_len = job->reply_payload.payload_len;
job->state_flags = FC_RQST_STATE_DONE; job->state_flags = FC_RQST_STATE_DONE;
job->reply->reply_payload_rcv_len = blk_rq_bytes(job->req->next_rq);
job->job_done(job); job->job_done(job);
zfcp_wka_port_put(ct_fc_job->ct.wka_port); zfcp_wka_port_put(ct_fc_job->ct.wka_port);

View File

@ -1146,7 +1146,8 @@ static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
case FSF_RESPONSE_SIZE_TOO_LARGE: case FSF_RESPONSE_SIZE_TOO_LARGE:
break; break;
case FSF_ACCESS_DENIED: case FSF_ACCESS_DENIED:
zfcp_fsf_access_denied_port(req, port); if (port)
zfcp_fsf_access_denied_port(req, port);
break; break;
case FSF_SBAL_MISMATCH: case FSF_SBAL_MISMATCH:
/* should never occure, avoided in zfcp_fsf_send_els */ /* should never occure, avoided in zfcp_fsf_send_els */