SCSI fixes for 4.19-rc3
Subsystems (3)
James Bottomley
maintainerThree fixes, all in drivers (qedi and iscsi target) so no wider impact even if the code changes are a bit extensive.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Mike Christie (1):
scsi: iscsi: target: Fix conn_ops double free
Nilesh Javali (1):
scsi: qedi: Add the CRC size within iSCSI NVM image
Vincent Pelletier (1):
scsi: iscsi: target: Set conn->sess to NULL when iscsi_login_set_conn_values fails
And the diffstat:
drivers/scsi/qedi/qedi.h | 7 +- drivers/scsi/qedi/qedi_main.c | 28 +++--- drivers/target/iscsi/iscsi_target.c | 9 +- drivers/target/iscsi/iscsi_target_login.c | 149 ++++++++++++++++-------------- drivers/target/iscsi/iscsi_target_login.h | 2 +- 5 files changed, 101 insertions(+), 94 deletions(-)
With full diff below.
James
---
drivers/scsi/qedi/qedi.h +6 -1
@@ -77,6 +77,11 @@ enum qedi_nvm_tgts { QEDI_NVM_TGT_SEC, }; +struct qedi_nvm_iscsi_image { +struct nvm_iscsi_cfg iscsi_cfg; +u32 crc; +}; +struct qedi_uio_ctrl {/* meta data */ u32 uio_hsi_version;
@@ -294,7 +299,7 @@ struct qedi_ctx {void *bdq_pbl_list;dma_addr_t bdq_pbl_list_dma;u8 bdq_pbl_list_num_entries; -struct nvm_iscsi_cfg *iscsi_cfg; +struct qedi_nvm_iscsi_image *iscsi_image;dma_addr_t nvm_buf_dma;void __iomem *bdq_primary_prod;void __iomem *bdq_secondary_prod;
drivers/scsi/qedi/qedi_main.c +15 -13
@@ -1346,23 +1346,26 @@ static int qedi_setup_int(struct qedi_ctx *qedi)static void qedi_free_nvm_iscsi_cfg (struct qedi_ctx *qedi) { -if (qedi->iscsi_cfg) +if (qedi->iscsi_image)dma_free_coherent (&qedi->pdev->dev, -sizeof (struct nvm_iscsi_cfg ), - qedi->iscsi_cfg, qedi->nvm_buf_dma); +sizeof (struct qedi_nvm_iscsi_image ), + qedi->iscsi_image, qedi->nvm_buf_dma); }static int qedi_alloc_nvm_iscsi_cfg (struct qedi_ctx *qedi) { - qedi->iscsi_cfg =dma_zalloc_coherent (&qedi->pdev->dev, -sizeof (struct nvm_iscsi_cfg ), - &qedi->nvm_buf_dma,GFP_KERNEL ); -if (!qedi->iscsi_cfg) { +struct qedi_nvm_iscsi_image nvm_image; + + qedi->iscsi_image =dma_zalloc_coherent (&qedi->pdev->dev, +sizeof (nvm_image), + &qedi->nvm_buf_dma, +GFP_KERNEL ); +if (!qedi->iscsi_image) {QEDI_ERR (&qedi->dbg_ctx,"Could not allocate NVM BUF.\n" );return -ENOMEM ; }QEDI_INFO (&qedi->dbg_ctx,QEDI_LOG_INFO , -"NVM BUF addr=0x%p dma=0x%llx.\n" , qedi->iscsi_cfg, +"NVM BUF addr=0x%p dma=0x%llx.\n" , qedi->iscsi_image, qedi->nvm_buf_dma);return 0 ;
@@ -1905,7 +1908,7 @@ qedi_get_nvram_block(struct qedi_ctx *qedi)struct nvm_iscsi_block *block; pf = qedi->dev_info.common.abs_pf_id; - block = &qedi->iscsi_cfg->block[0 ]; + block = &qedi->iscsi_image->iscsi_cfg.block[0 ];for (i =0 ; i <NUM_OF_ISCSI_PF_SUPPORTED ; i++, block++) { flags = ((block->id) &NVM_ISCSI_CFG_BLK_CTRL_FLAG_MASK ) >>NVM_ISCSI_CFG_BLK_CTRL_FLAG_OFFSET ;
@@ -2194,15 +2197,14 @@ static void qedi_boot_release(void *data)static int qedi_get_boot_info (struct qedi_ctx *qedi) {int ret =1 ; -u16 len; - - len =sizeof (struct nvm_iscsi_cfg ); +struct qedi_nvm_iscsi_image nvm_image;QEDI_INFO (&qedi->dbg_ctx,QEDI_LOG_INFO ,"Get NVM iSCSI CFG image\n" ); ret = qedi_ops->common->nvm_get_image (qedi->cdev,QED_NVM_IMAGE_ISCSI_CFG , - (char *)qedi->iscsi_cfg, len); + (char *)qedi->iscsi_image, +sizeof (nvm_image));if (ret)QEDI_ERR (&qedi->dbg_ctx,"Could not get NVM image. ret = %d\n" , ret);
drivers/target/iscsi/iscsi_target.c +1 -8
@@ -4208,22 +4208,15 @@ int iscsit_close_connection(crypto_free_ahash (tfm); } -free_cpumask_var (conn->conn_cpumask); - -kfree (conn->conn_ops); - conn->conn_ops =NULL ; -if (conn->sock)sock_release (conn->sock);if (conn->conn_transport->iscsit_free_conn) conn->conn_transport->iscsit_free_conn (conn); -iscsit_put_transport (conn->conn_transport); -pr_debug ("Moving to TARG_CONN_STATE_FREE.\n" ); conn->conn_state =TARG_CONN_STATE_FREE ; -kfree (conn); +iscsit_free_conn (conn);spin_lock_bh (&sess->conn_lock);atomic_dec (&sess->nconn);
drivers/target/iscsi/iscsi_target_login.c +78 -71
213 lines not on this page · raw message
drivers/target/iscsi/iscsi_target_login.h +1 -1
@@ -19,7 +19,7 @@ extern int iscsi_target_setup_login_socket(struct iscsi_np *,extern int iscsit_accept_np (struct iscsi_np *,struct iscsi_conn *);extern int iscsit_get_login_rx (struct iscsi_conn *,struct iscsi_login *);extern int iscsit_put_login_tx (struct iscsi_conn *,struct iscsi_login *,u32 ); -extern void iscsit_free_conn (struct iscsi_np *,struct iscsi_conn *); +extern void iscsit_free_conn (struct iscsi_conn *);extern int iscsit_start_kthreads (struct iscsi_conn *);extern void iscsi_post_login_handler (struct iscsi_np *,struct iscsi_conn *,u8 ); extern void iscsi_target_login_sess_out(struct iscsi_conn *, struct iscsi_np *,