target/pscsi: Don't leak scsi_host if hba is VIRTUAL_HOST
commit 5a7125c64def3b21f8147eca8b54949a60963942 upstream. See https://bugzilla.redhat.com/show_bug.cgi?id=1025672 We need to put() the reference to the scsi host that we got in pscsi_configure_device(). In VIRTUAL_HOST mode it is associated with the dev_virt, not the hba_virt. Signed-off-by: Andy Grover <agrover@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
202847125c
commit
72ca055495
|
@ -520,6 +520,7 @@ static int pscsi_configure_device(struct se_device *dev)
|
|||
" pdv_host_id: %d\n", pdv->pdv_host_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
pdv->pdv_lld_host = sh;
|
||||
}
|
||||
} else {
|
||||
if (phv->phv_mode == PHV_VIRTUAL_HOST_ID) {
|
||||
|
@ -602,6 +603,8 @@ static void pscsi_free_device(struct se_device *dev)
|
|||
if ((phv->phv_mode == PHV_LLD_SCSI_HOST_NO) &&
|
||||
(phv->phv_lld_host != NULL))
|
||||
scsi_host_put(phv->phv_lld_host);
|
||||
else if (pdv->pdv_lld_host)
|
||||
scsi_host_put(pdv->pdv_lld_host);
|
||||
|
||||
if ((sd->type == TYPE_DISK) || (sd->type == TYPE_ROM))
|
||||
scsi_device_put(sd);
|
||||
|
|
|
@ -45,6 +45,7 @@ struct pscsi_dev_virt {
|
|||
int pdv_lun_id;
|
||||
struct block_device *pdv_bd;
|
||||
struct scsi_device *pdv_sd;
|
||||
struct Scsi_Host *pdv_lld_host;
|
||||
} ____cacheline_aligned;
|
||||
|
||||
typedef enum phv_modes {
|
||||
|
|
Loading…
Reference in New Issue