Re: [patch] target: unlock on error in pscsi_create_virtdevice()

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

 



On Sun, 2011-10-02 at 01:59 +0300, Dan Carpenter wrote:
> This function should take the lock on success but on the error cases
> it doesn't.
> 
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> 

Hi Dan,

> diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
> index ba9e94d..b619596 100644
> --- a/drivers/target/target_core_pscsi.c
> +++ b/drivers/target/target_core_pscsi.c
> @@ -567,7 +567,7 @@ static struct se_device *pscsi_create_virtdevice(
>  			if (IS_ERR(sh)) {
>  				pr_err("pSCSI: Unable to locate"
>  					" pdv_host_id: %d\n", pdv->pdv_host_id);
> -				return (struct se_device *) sh;
> +				return ERR_CAST(sh);
>  			}
>  		}
>  	} else {
> @@ -609,6 +609,7 @@ static struct se_device *pscsi_create_virtdevice(
>  				hba->hba_flags &= ~HBA_FLAGS_PSCSI_MODE;
>  			}
>  			pdv->pdv_sd = NULL;
> +			spin_unlock_irq(sh->host_lock);
>  			return ERR_PTR(-ENODEV);
>  		}
>  		return dev;
> --

So the additional of an unlock in the failure path above is actually a
duplicate.  pscsi_create_type_*() will already do the unlocking before
returning back into pscsi_create_virtdevice()..  I know this is slightly
confusing, but we need to keep host_lock held before calling into
scsi_device_get() for type_disk and type_rom.

So that said, i'm commiting a following revised version of your patch to
add the correct ERR_CAST usage above.

Thanks,

--nab

commit 8c206dce8ccf83e2b3e121e89074d841edd43536
Author: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Date:   Sun Oct 2 01:59:13 2011 +0300

    target: Make pscsi_create_virtdevice use ERR_CAST
    
    This patch changes pscsi_create_virtdevice() to properly return ERR_CAST
    instead of a raw pointer upon scsi_host_lookup() failure.
    
    Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
    Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>

diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index c4509e3..e72a638 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -567,7 +567,7 @@ static struct se_device *pscsi_create_virtdevice(
                        if (IS_ERR(sh)) {
                                pr_err("pSCSI: Unable to locate"
                                        " pdv_host_id: %d\n", pdv->pdv_host_id);
-                               return (struct se_device *) sh;
+                               return ERR_CAST(sh);
                        }
                }
        } else {





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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux