Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc577d55 authored by Christof Schmitt's avatar Christof Schmitt Committed by James Bottomley
Browse files

[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: default avatarSwen Schillig <swen@vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 9d544f2b
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -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_payload_rcv_len = blk_rq_bytes(job->req->next_rq);
	reply->reply_payload_rcv_len = job->reply_payload.payload_len;

out:
	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);
		port = rport->dd_data;
		if (port)
			zfcp_port_get(port);
			els_fc_job->els.d_id = port->d_id;
		read_unlock_irq(&zfcp_data.config_lock);
		if (!port) {
			kfree(els_fc_job);
			return -EINVAL;
		}
		els_fc_job->els.port = port;
		els_fc_job->els.d_id = port->d_id;
		zfcp_port_put(port);
	} else {
		port_did = job->request->rqst_data.h_els.port_id;
		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 ?
				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->reply->reply_payload_rcv_len = blk_rq_bytes(job->req->next_rq);
	job->job_done(job);

	zfcp_wka_port_put(ct_fc_job->ct.wka_port);
+2 −1
Original line number Diff line number Diff line
@@ -1146,6 +1146,7 @@ static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
	case FSF_RESPONSE_SIZE_TOO_LARGE:
		break;
	case FSF_ACCESS_DENIED:
		if (port)
			zfcp_fsf_access_denied_port(req, port);
		break;
	case FSF_SBAL_MISMATCH: