diff options
author | Dmitry Bogdanov <d.bogdanov@yadro.com> | 2023-03-01 11:45:12 +0300 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2023-03-10 05:29:23 +0300 |
commit | 31177b74790cc566200f30705bf9a83d168da893 (patch) | |
tree | 33eb3c53a89d92aafbeb9c34da619693b50c57cd /drivers/target/target_core_tpg.c | |
parent | 5fe99dace4313b0061d46f69e32f981956c92445 (diff) | |
download | linux-31177b74790cc566200f30705bf9a83d168da893.tar.xz |
scsi: target: core: Add RTPI attribute for target port
RELATIVE TARGET PORT IDENTIFIER can be read and configured via configfs:
$ echo 0x10 > $TARGET/tpgt_N/rtpi
RTPI can be changed only on disabled target ports.
Co-developed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
Link: https://lore.kernel.org/r/20230301084512.21956-5-d.bogdanov@yadro.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/target/target_core_tpg.c')
-rw-r--r-- | drivers/target/target_core_tpg.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c index b1d9383386ec..2e079c6a8e8c 100644 --- a/drivers/target/target_core_tpg.c +++ b/drivers/target/target_core_tpg.c @@ -445,10 +445,21 @@ static int target_tpg_register_rtpi(struct se_portal_group *se_tpg) u32 val; int ret; - ret = xa_alloc(&tpg_xa, &val, se_tpg, - XA_LIMIT(1, USHRT_MAX), GFP_KERNEL); - if (!ret) - se_tpg->tpg_rtpi = val; + if (se_tpg->rtpi_manual) { + ret = xa_insert(&tpg_xa, se_tpg->tpg_rtpi, se_tpg, GFP_KERNEL); + if (ret) { + pr_info("%s_TPG[%hu] - Can not set RTPI %#x, it is already busy", + se_tpg->se_tpg_tfo->fabric_name, + se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg), + se_tpg->tpg_rtpi); + return -EINVAL; + } + } else { + ret = xa_alloc(&tpg_xa, &val, se_tpg, + XA_LIMIT(1, USHRT_MAX), GFP_KERNEL); + if (!ret) + se_tpg->tpg_rtpi = val; + } return ret; } |