All of lore.kernel.org
 help / color / mirror / Atom feed
From: Himanshu Madhani <hmadhani@marvell.com>
To: <James.Bottomley@HansenPartnership.com>, <martin.petersen@oracle.com>
Cc: <hmadhani@marvell.com>, <linux-scsi@vger.kernel.org>
Subject: [PATCH 15/25] qla2xxx: Fix RDP response size
Date: Wed, 12 Feb 2020 13:44:26 -0800	[thread overview]
Message-ID: <20200212214436.25532-16-hmadhani@marvell.com> (raw)
In-Reply-To: <20200212214436.25532-1-hmadhani@marvell.com>

This patch fixes RDP length in case when driver
needs to reduce length of RDP response

Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 53 ++++++++++++++++---------------------------
 1 file changed, 19 insertions(+), 34 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index d06fa318f378..b24813051766 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -5773,6 +5773,7 @@ qla25xx_rdp_rsp_reduce_size(struct scsi_qla_host *vha,
 {
 	char fwstr[16];
 	u32 sid = purex->s_id[2] << 16 | purex->s_id[1] << 8 | purex->s_id[0];
+	struct port_database_24xx *pdb;
 
 	/* Domain Controller is always logged-out. */
 	/* if RDP request is not from Domain Controller: */
@@ -5781,6 +5782,24 @@ qla25xx_rdp_rsp_reduce_size(struct scsi_qla_host *vha,
 
 	ql_dbg(ql_dbg_init, vha, 0x0181, "%s: s_id=%#x\n", __func__, sid);
 
+	pdb = kzalloc(sizeof(*pdb), GFP_KERNEL);
+	if (!pdb) {
+		ql_dbg(ql_dbg_init, vha, 0x0181,
+		    "%s: Failed allocate pdb\n", __func__);
+	} else if (qla24xx_get_port_database(vha, purex->nport_handle, pdb)) {
+		ql_dbg(ql_dbg_init, vha, 0x0181,
+		    "%s: Failed get pdb sid=%x\n", __func__, sid);
+	} else if (pdb->current_login_state != PDS_PLOGI_COMPLETE &&
+	    pdb->current_login_state != PDS_PRLI_COMPLETE) {
+		ql_dbg(ql_dbg_init, vha, 0x0181,
+		    "%s: Port not logged in sid=%#x\n", __func__, sid);
+	} else {
+		/* RDP request is from logged in port */
+		kfree(pdb);
+		return false;
+	}
+	kfree(pdb);
+
 	vha->hw->isp_ops->fw_version_str(vha, fwstr, sizeof(fwstr));
 	fwstr[strcspn(fwstr, " ")] = 0;
 	/* if FW version allows RDP response length upto 2048 bytes: */
@@ -5899,7 +5918,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 {
 	struct qla_hw_data *ha = vha->hw;
 	struct purex_entry_24xx *purex = pkt;
-	struct port_database_24xx *pdb = NULL;
 	dma_addr_t rsp_els_dma;
 	dma_addr_t rsp_payload_dma;
 	dma_addr_t stat_dma;
@@ -5984,34 +6002,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	rsp_els->rx_address = 0;
 	rsp_els->rx_len = 0;
 
-	if (sizeof(*rsp_payload) <= 0x100)
-		goto accept;
-
-	pdb = kzalloc(sizeof(*pdb), GFP_KERNEL);
-	if (!pdb)
-		goto reduce;
-
-	rval = qla24xx_get_port_database(vha, purex->nport_handle, pdb);
-	if (rval)
-		goto reduce;
-
-	if (pdb->port_id[0] != purex->s_id[2] ||
-	    pdb->port_id[1] != purex->s_id[1] ||
-	    pdb->port_id[2] != purex->s_id[0])
-		goto reduce;
-
-	if (pdb->current_login_state == PDS_PLOGI_COMPLETE ||
-	    pdb->current_login_state == PDS_PRLI_COMPLETE)
-		goto accept;
-
-reduce:
-	ql_dbg(ql_dbg_init, vha, 0x016e, "Requesting port is not logged in.\n");
-	rsp_els->tx_byte_count = rsp_els->tx_len =
-	    offsetof(struct rdp_rsp_payload, buffer_credit_desc);
-	ql_dbg(ql_dbg_init, vha, 0x016f, "Reduced response payload size %u.\n",
-	    rsp_els->tx_byte_count);
-
-accept:
 	/* Prepare Response Payload */
 	rsp_payload->hdr.cmd = cpu_to_be32(0x2 << 24); /* LS_ACC */
 	rsp_payload->hdr.len = cpu_to_be32(
@@ -6129,9 +6119,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	    vha->fabric_port_name,
 	    sizeof(rsp_payload->port_name_direct_desc.WWPN));
 
-	if (rsp_els->tx_byte_count < sizeof(*rsp_payload))
-		goto send;
-
 	if (bbc) {
 		memset(bbc, 0, sizeof(*bbc));
 		rval = qla24xx_get_buffer_credits(vha, bbc, bbc_dma);
@@ -6331,8 +6318,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	}
 
 dealloc:
-	kfree(pdb);
-
 	if (bbc)
 		dma_free_coherent(&ha->pdev->dev, sizeof(*bbc),
 		    bbc, bbc_dma);
-- 
2.12.0


  parent reply	other threads:[~2020-02-12 21:47 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-12 21:44 [PATCH 00/25] qla2xxx: Updates for the driver Himanshu Madhani
2020-02-12 21:44 ` [PATCH 01/25] qla2xxx: Add beacon LED config sysfs interface Himanshu Madhani
2020-02-12 21:44 ` [PATCH 02/25] qla2xxx: Move free of fcport out of interrupt context Himanshu Madhani
2020-02-12 21:44 ` [PATCH 03/25] qla2xxx: Add sysfs node for D-Port Diagnostics AEN data Himanshu Madhani
2020-02-12 21:44 ` [PATCH 04/25] qla2xxx: Remove all DIX-0 references Himanshu Madhani
2020-02-12 21:44 ` [PATCH 05/25] qla2xxx: Add endianizer macro calls to fc host stats Himanshu Madhani
2020-02-12 21:44 ` [PATCH 06/25] qla2xxx: Add changes in preparation for vendor extended FDMI/RDP Himanshu Madhani
2020-02-12 21:44 ` [PATCH 07/25] qla2xxx: Add vendor extended RDP additions and amendments Himanshu Madhani
2020-02-12 21:44 ` [PATCH 08/25] qla2xxx: Add ql2xrdpenable module parameter for RDP Himanshu Madhani
2020-02-12 21:44 ` [PATCH 09/25] qla2xxx: Add vendor extended FDMI commands Himanshu Madhani
2020-02-12 21:44 ` [PATCH 10/25] qla2xxx: Display message for FCE enabled Himanshu Madhani
2020-02-12 21:44 ` [PATCH 11/25] qla2xxx: Show correct port speed capabilities for RDP command Himanshu Madhani
2020-02-12 21:44 ` [PATCH 12/25] qla2xxx: Cleanup ELS/PUREX iocb fields Himanshu Madhani
2020-02-12 21:44 ` [PATCH 13/25] qla2xxx: Add deferred queue for processing ABTS and RDP Himanshu Madhani
2020-02-12 21:44 ` [PATCH 14/25] qla2xxx: Handle cases for limiting RDP response payload length Himanshu Madhani
2020-02-12 21:44 ` Himanshu Madhani [this message]
2020-02-12 21:44 ` [PATCH 16/25] qla2xxx: Use endian macros to assign static fields in fwdump header Himanshu Madhani
2020-02-12 21:44 ` [PATCH 17/25] qla2xxx: Correction to selection of loopback/echo test Himanshu Madhani
2020-02-12 21:44 ` [PATCH 18/25] qla2xxx: Fix qla2x00_echo_test() based on ISP type Himanshu Madhani
2020-02-12 21:44 ` [PATCH 19/25] qla2xxx: Print portname for logging in qla24xx_logio_entry() Himanshu Madhani
2020-02-12 21:44 ` [PATCH 20/25] qla2xxx: Use correct ISP28xx active FW region Himanshu Madhani
2020-02-12 21:44 ` [PATCH 21/25] qla2xxx: Save rscn_gen for new fcport Himanshu Madhani
2020-02-12 21:44 ` [PATCH 22/25] qla2xxx: Fix control flags for login/logout IOCB Himanshu Madhani
2020-02-12 21:44 ` [PATCH 23/25] qla2xxx: Add fixes for mailbox command Himanshu Madhani
2020-02-12 21:44 ` [PATCH 24/25] qla2xxx: Use QLA_FW_STOPPED macro to propagate flag Himanshu Madhani
2020-02-12 21:44 ` [PATCH 25/25] qla2xxx: Update driver version to 10.01.00.24-k Himanshu Madhani
2020-02-21 23:33 ` [PATCH 00/25] qla2xxx: Updates for the driver Martin K. Petersen
2020-02-24 16:36   ` Himanshu Madhani
2020-02-25  4:32   ` Bart Van Assche

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200212214436.25532-16-hmadhani@marvell.com \
    --to=hmadhani@marvell.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.