Re: [PATCH 01/15] target: check enforce_pr_isids during registration

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

 



On 5/10/20 2:57 PM, Mike Christie wrote:
> Move the check for enforce_pr_isids to the registration code where we
> can fail at the time an initiator tries to register a path without an
> isid. In its current place in __core_scsi3_locate_pr_reg, it is too
> late because it can be registered and be reported in PR in commands and
> it is stuck in this state because we cannot unregister it.
> 
> Note.
> I am including in this patchset, because the 5th patch is built on top.
> 
> Signed-off-by: Mike Christie <mchristi@xxxxxxxxxx>
> ---
>  drivers/target/target_core_pr.c | 24 +++++++++++++++---------
>  1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
> index 5e93169..cd2d32f 100644
> --- a/drivers/target/target_core_pr.c
> +++ b/drivers/target/target_core_pr.c
> @@ -1176,15 +1176,6 @@ static struct t10_pr_registration *__core_scsi3_locate_pr_reg(
>  		 * ISID, then we have found a match.
>  		 */
>  		if (!pr_reg->isid_present_at_reg) {
> -			/*
> -			 * Determine if this SCSI device server requires that
> -			 * SCSI Intiatior TransportID w/ ISIDs is enforced
> -			 * for fabric modules (iSCSI) requiring them.
> -			 */
> -			if (tpg->se_tpg_tfo->sess_get_initiator_sid != NULL) {
> -				if (dev->dev_attrib.enforce_pr_isids)
> -					continue;
> -			}
>  			atomic_inc_mb(&pr_reg->pr_res_holders);
>  			spin_unlock(&pr_tmpl->registration_lock);
>  			return pr_reg;
> @@ -1591,10 +1582,25 @@ static void core_scsi3_lunacl_undepend_item(struct se_dev_entry *se_deve)
>  				continue;
>  			dest_rtpi = tmp_lun->lun_rtpi;
>  
> +			iport_ptr = NULL;
>  			i_str = target_parse_pr_out_transport_id(tmp_tpg,
>  					ptr, &tid_len, &iport_ptr);
>  			if (!i_str)
>  				continue;
> +			/*
> +			 * Determine if this SCSI device server requires that
> +			 * SCSI Intiatior TransportID w/ ISIDs is enforced
> +			 * for fabric modules (iSCSI) requiring them.
> +			 */
> +			if (tpg->se_tpg_tfo->sess_get_initiator_sid &&
> +                            dev->dev_attrib.enforce_pr_isids &&
> +			    !iport_ptr) {
> +				pr_warn("SPC-PR: enforce_pr_isids is set but a isid has not been sent in the SPEC_I_PT data for %s.",
> +					i_str);
> +				ret = TCM_INVALID_PARAMETER_LIST;
> +				spin_unlock(&dev->se_port_lock);
> +				goto out_unmap;
> +			}
>  
>  			atomic_inc_mb(&tmp_tpg->tpg_pr_ref_count);
>  			spin_unlock(&dev->se_port_lock);
> 

Reviewed-by: Lee Duncan <lduncan@xxxxxxxx>



[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