Re: [PATCH] target/pscsi: Don't leak scsi_host if hba is VIRTUAL_HOST

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Andy,

Apologies for the delayed response on this.  Comments below.

On Fri, 2015-05-22 at 14:07 -0700, Andy Grover wrote:
> 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@xxxxxxxxxx>
> ---
>  drivers/target/target_core_pscsi.c | 3 +++
>  drivers/target/target_core_pscsi.h | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
> index 5bc458e..7ce0445 100644
> --- a/drivers/target/target_core_pscsi.c
> +++ b/drivers/target/target_core_pscsi.c
> @@ -519,6 +519,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) {
> @@ -601,6 +602,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);
> diff --git a/drivers/target/target_core_pscsi.h b/drivers/target/target_core_pscsi.h
> index 1bd757d..820d305 100644
> --- a/drivers/target/target_core_pscsi.h
> +++ b/drivers/target/target_core_pscsi.h
> @@ -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 {

Nice catch on this long-standing bug.  Applied to target-pending/master,
with a CC' to stable.

Thank you,

--nab

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux