public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] target: unlock on error in pscsi_create_virtdevice()
@ 2011-10-01 22:59 Dan Carpenter
  2011-10-09  1:06 ` Nicholas A. Bellinger
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2011-10-01 22:59 UTC (permalink / raw)
  To: Nicholas A. Bellinger; +Cc: linux-scsi, target-devel, kernel-janitors

This function should take the lock on success but on the error cases
it doesn't.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

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;

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [patch] target: unlock on error in pscsi_create_virtdevice()
  2011-10-01 22:59 [patch] target: unlock on error in pscsi_create_virtdevice() Dan Carpenter
@ 2011-10-09  1:06 ` Nicholas A. Bellinger
  2011-10-09  5:29   ` Dan Carpenter
  0 siblings, 1 reply; 3+ messages in thread
From: Nicholas A. Bellinger @ 2011-10-09  1:06 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-scsi, target-devel, kernel-janitors

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@oracle.com>
> 

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@oracle.com>
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@oracle.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

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 {

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [patch] target: unlock on error in pscsi_create_virtdevice()
  2011-10-09  1:06 ` Nicholas A. Bellinger
@ 2011-10-09  5:29   ` Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2011-10-09  5:29 UTC (permalink / raw)
  To: Nicholas A. Bellinger; +Cc: linux-scsi, target-devel, kernel-janitors

Sorry.  I should have seen that.  That was sloppiness on my part.

Thanks for catching that.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-10-09  5:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-01 22:59 [patch] target: unlock on error in pscsi_create_virtdevice() Dan Carpenter
2011-10-09  1:06 ` Nicholas A. Bellinger
2011-10-09  5:29   ` Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox