mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-11-08 18:43:21 +01:00
scsi: target: Check enforce_pr_isids during registration
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. [mkp: applied by hand] Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Hannes Reinecke <[email protected]> Reviewed-by: Lee Duncan <[email protected]> Signed-off-by: Mike Christie <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
This commit is contained in:
1 parent
86f2da1112
commit
63c9ffe473
1 file changed
+15
-9
@@ -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 @@ core_scsi3_decode_spec_i_port(
|
||||
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);
|
||||
|
||||
Reference in new issue
Block a user