Allocate a discovery buffer for the NVMe channel group and free it on
all teardown and error paths.

The existing discovery-buffer allocation only covered the SCSI channel
group. This patch is prepratory for sending NVMe/FC target discovery
MAD.

Signed-off-by: Tyrel Datwyler <[email protected]>
---
 drivers/scsi/ibmvscsi/ibmvfc-core.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvfc-core.c 
b/drivers/scsi/ibmvscsi/ibmvfc-core.c
index 9cd688762150..efac82c48258 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc-core.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc-core.c
@@ -6365,6 +6365,7 @@ static void ibmvfc_free_mem(struct ibmvfc_host *vhost)
        mempool_destroy(vhost->tgt_pool);
        kfree(vhost->trace);
        ibmvfc_free_disc_buf(vhost->dev, &vhost->scsi_scrqs);
+       ibmvfc_free_disc_buf(vhost->dev, &vhost->nvme_scrqs);
        dma_free_coherent(vhost->dev, sizeof(*vhost->login_buf),
                          vhost->login_buf, vhost->login_buf_dma);
        dma_free_coherent(vhost->dev, sizeof(*vhost->channel_setup_buf),
@@ -6427,12 +6428,15 @@ static int ibmvfc_alloc_mem(struct ibmvfc_host *vhost)
        if (ibmvfc_alloc_disc_buf(dev, &vhost->scsi_scrqs))
                goto free_login_buffer;
 
+       if (ibmvfc_alloc_disc_buf(dev, &vhost->nvme_scrqs))
+               goto free_scsi_disc_buffer;
+
        vhost->trace = kzalloc_objs(struct ibmvfc_trace_entry,
                                    IBMVFC_NUM_TRACE_ENTRIES);
        atomic_set(&vhost->trace_index, -1);
 
        if (!vhost->trace)
-               goto free_scsi_disc_buffer;
+               goto free_nvme_disc_buffer;
 
        vhost->tgt_pool = mempool_create_kmalloc_pool(IBMVFC_TGT_MEMPOOL_SZ,
                                                      sizeof(struct 
ibmvfc_target));
@@ -6458,6 +6462,8 @@ static int ibmvfc_alloc_mem(struct ibmvfc_host *vhost)
        mempool_destroy(vhost->tgt_pool);
 free_trace:
        kfree(vhost->trace);
+free_nvme_disc_buffer:
+       ibmvfc_free_disc_buf(dev, &vhost->nvme_scrqs);
 free_scsi_disc_buffer:
        ibmvfc_free_disc_buf(dev, &vhost->scsi_scrqs);
 free_login_buffer:
-- 
2.54.0


Reply via email to