aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_pr.c
diff options
context:
space:
mode:
authorAndy Grover <agrover@redhat.com>2013-05-16 13:40:54 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2013-06-14 03:04:25 -0400
commit33ce6a87f2aba790429ac228288edc0e410143a2 (patch)
tree5ce5e96b2b3c478f38469ea8cb7ea19ed46a6012 /drivers/target/target_core_pr.c
parent317ddd256b9c24b0d78fa8018f80f1e495481a10 (diff)
target: Add register_type and preempt_type enums to clarify code
core_scsi3_enulate_pro_register took an 'ignore_key' parameter that really distinguished between REGISTER and REGISTER_AND_IGNORE_EXISTING_KEY registration types, which was a little confusing. Same situation for PREEMPT and PREEMPT_AND_ABORT. Use enums to add a little more descriptiveness to the code. Signed-off-by: Andy Grover <agrover@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_pr.c')
-rw-r--r--drivers/target/target_core_pr.c77
1 files changed, 44 insertions, 33 deletions
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 3240f2cc81ef..a081145cd1c7 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -65,6 +65,17 @@ int core_pr_dump_initiator_port(
65 return 1; 65 return 1;
66} 66}
67 67
68enum register_type {
69 REGISTER,
70 REGISTER_AND_IGNORE_EXISTING_KEY,
71 REGISTER_AND_MOVE,
72};
73
74enum preempt_type {
75 PREEMPT,
76 PREEMPT_AND_ABORT,
77};
78
68static void __core_scsi3_complete_pro_release(struct se_device *, struct se_node_acl *, 79static void __core_scsi3_complete_pro_release(struct se_device *, struct se_node_acl *,
69 struct t10_pr_registration *, int); 80 struct t10_pr_registration *, int);
70 81
@@ -869,7 +880,7 @@ static void core_scsi3_aptpl_reserve(
869} 880}
870 881
871static void __core_scsi3_add_registration(struct se_device *, struct se_node_acl *, 882static void __core_scsi3_add_registration(struct se_device *, struct se_node_acl *,
872 struct t10_pr_registration *, int, int); 883 struct t10_pr_registration *, enum register_type, int);
873 884
874static int __core_scsi3_check_aptpl_registration( 885static int __core_scsi3_check_aptpl_registration(
875 struct se_device *dev, 886 struct se_device *dev,
@@ -962,7 +973,7 @@ static void __core_scsi3_dump_registration(
962 struct se_device *dev, 973 struct se_device *dev,
963 struct se_node_acl *nacl, 974 struct se_node_acl *nacl,
964 struct t10_pr_registration *pr_reg, 975 struct t10_pr_registration *pr_reg,
965 int register_type) 976 enum register_type register_type)
966{ 977{
967 struct se_portal_group *se_tpg = nacl->se_tpg; 978 struct se_portal_group *se_tpg = nacl->se_tpg;
968 char i_buf[PR_REG_ISID_ID_LEN]; 979 char i_buf[PR_REG_ISID_ID_LEN];
@@ -973,8 +984,8 @@ static void __core_scsi3_dump_registration(
973 PR_REG_ISID_ID_LEN); 984 PR_REG_ISID_ID_LEN);
974 985
975 pr_debug("SPC-3 PR [%s] Service Action: REGISTER%s Initiator" 986 pr_debug("SPC-3 PR [%s] Service Action: REGISTER%s Initiator"
976 " Node: %s%s\n", tfo->get_fabric_name(), (register_type == 2) ? 987 " Node: %s%s\n", tfo->get_fabric_name(), (register_type == REGISTER_AND_MOVE) ?
977 "_AND_MOVE" : (register_type == 1) ? 988 "_AND_MOVE" : (register_type == REGISTER_AND_IGNORE_EXISTING_KEY) ?
978 "_AND_IGNORE_EXISTING_KEY" : "", nacl->initiatorname, 989 "_AND_IGNORE_EXISTING_KEY" : "", nacl->initiatorname,
979 (prf_isid) ? i_buf : ""); 990 (prf_isid) ? i_buf : "");
980 pr_debug("SPC-3 PR [%s] registration on Target Port: %s,0x%04x\n", 991 pr_debug("SPC-3 PR [%s] registration on Target Port: %s,0x%04x\n",
@@ -998,7 +1009,7 @@ static void __core_scsi3_add_registration(
998 struct se_device *dev, 1009 struct se_device *dev,
999 struct se_node_acl *nacl, 1010 struct se_node_acl *nacl,
1000 struct t10_pr_registration *pr_reg, 1011 struct t10_pr_registration *pr_reg,
1001 int register_type, 1012 enum register_type register_type,
1002 int register_move) 1013 int register_move)
1003{ 1014{
1004 struct target_core_fabric_ops *tfo = nacl->se_tpg->se_tpg_tfo; 1015 struct target_core_fabric_ops *tfo = nacl->se_tpg->se_tpg_tfo;
@@ -1064,7 +1075,7 @@ static int core_scsi3_alloc_registration(
1064 u64 sa_res_key, 1075 u64 sa_res_key,
1065 int all_tg_pt, 1076 int all_tg_pt,
1066 int aptpl, 1077 int aptpl,
1067 int register_type, 1078 enum register_type register_type,
1068 int register_move) 1079 int register_move)
1069{ 1080{
1070 struct t10_pr_registration *pr_reg; 1081 struct t10_pr_registration *pr_reg;
@@ -2030,7 +2041,7 @@ core_scsi3_update_and_write_aptpl(struct se_device *dev, unsigned char *in_buf,
2030 2041
2031static sense_reason_t 2042static sense_reason_t
2032core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key, 2043core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2033 int aptpl, int all_tg_pt, int spec_i_pt, int ignore_key) 2044 int aptpl, int all_tg_pt, int spec_i_pt, enum register_type register_type)
2034{ 2045{
2035 struct se_session *se_sess = cmd->se_sess; 2046 struct se_session *se_sess = cmd->se_sess;
2036 struct se_device *dev = cmd->se_dev; 2047 struct se_device *dev = cmd->se_dev;
@@ -2083,7 +2094,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2083 if (core_scsi3_alloc_registration(cmd->se_dev, 2094 if (core_scsi3_alloc_registration(cmd->se_dev,
2084 se_sess->se_node_acl, se_deve, isid_ptr, 2095 se_sess->se_node_acl, se_deve, isid_ptr,
2085 sa_res_key, all_tg_pt, aptpl, 2096 sa_res_key, all_tg_pt, aptpl,
2086 ignore_key, 0)) { 2097 register_type, 0)) {
2087 pr_err("Unable to allocate" 2098 pr_err("Unable to allocate"
2088 " struct t10_pr_registration\n"); 2099 " struct t10_pr_registration\n");
2089 return TCM_INVALID_PARAMETER_LIST; 2100 return TCM_INVALID_PARAMETER_LIST;
@@ -2136,7 +2147,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2136 pr_reg = pr_reg_e; 2147 pr_reg = pr_reg_e;
2137 type = pr_reg->pr_res_type; 2148 type = pr_reg->pr_res_type;
2138 2149
2139 if (!ignore_key) { 2150 if (register_type == REGISTER) {
2140 if (res_key != pr_reg->pr_res_key) { 2151 if (res_key != pr_reg->pr_res_key) {
2141 pr_err("SPC-3 PR REGISTER: Received" 2152 pr_err("SPC-3 PR REGISTER: Received"
2142 " res_key: 0x%016Lx does not match" 2153 " res_key: 0x%016Lx does not match"
@@ -2280,7 +2291,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
2280 pr_debug("SPC-3 PR [%s] REGISTER%s: Changed Reservation" 2291 pr_debug("SPC-3 PR [%s] REGISTER%s: Changed Reservation"
2281 " Key for %s to: 0x%016Lx PRgeneration:" 2292 " Key for %s to: 0x%016Lx PRgeneration:"
2282 " 0x%08x\n", cmd->se_tfo->get_fabric_name(), 2293 " 0x%08x\n", cmd->se_tfo->get_fabric_name(),
2283 (ignore_key) ? "_AND_IGNORE_EXISTING_KEY" : "", 2294 (register_type == REGISTER_AND_IGNORE_EXISTING_KEY) ? "_AND_IGNORE_EXISTING_KEY" : "",
2284 pr_reg->pr_reg_nacl->initiatorname, 2295 pr_reg->pr_reg_nacl->initiatorname,
2285 pr_reg->pr_res_key, pr_reg->pr_res_generation); 2296 pr_reg->pr_res_key, pr_reg->pr_res_generation);
2286 2297
@@ -2810,7 +2821,7 @@ static void __core_scsi3_complete_pro_preempt(
2810 struct list_head *preempt_and_abort_list, 2821 struct list_head *preempt_and_abort_list,
2811 int type, 2822 int type,
2812 int scope, 2823 int scope,
2813 int abort) 2824 enum preempt_type preempt_type)
2814{ 2825{
2815 struct se_node_acl *nacl = pr_reg->pr_reg_nacl; 2826 struct se_node_acl *nacl = pr_reg->pr_reg_nacl;
2816 struct target_core_fabric_ops *tfo = nacl->se_tpg->se_tpg_tfo; 2827 struct target_core_fabric_ops *tfo = nacl->se_tpg->se_tpg_tfo;
@@ -2834,11 +2845,11 @@ static void __core_scsi3_complete_pro_preempt(
2834 2845
2835 pr_debug("SPC-3 PR [%s] Service Action: PREEMPT%s created new" 2846 pr_debug("SPC-3 PR [%s] Service Action: PREEMPT%s created new"
2836 " reservation holder TYPE: %s ALL_TG_PT: %d\n", 2847 " reservation holder TYPE: %s ALL_TG_PT: %d\n",
2837 tfo->get_fabric_name(), (abort) ? "_AND_ABORT" : "", 2848 tfo->get_fabric_name(), (preempt_type == PREEMPT_AND_ABORT) ? "_AND_ABORT" : "",
2838 core_scsi3_pr_dump_type(type), 2849 core_scsi3_pr_dump_type(type),
2839 (pr_reg->pr_reg_all_tg_pt) ? 1 : 0); 2850 (pr_reg->pr_reg_all_tg_pt) ? 1 : 0);
2840 pr_debug("SPC-3 PR [%s] PREEMPT%s from Node: %s%s\n", 2851 pr_debug("SPC-3 PR [%s] PREEMPT%s from Node: %s%s\n",
2841 tfo->get_fabric_name(), (abort) ? "_AND_ABORT" : "", 2852 tfo->get_fabric_name(), (preempt_type == PREEMPT_AND_ABORT) ? "_AND_ABORT" : "",
2842 nacl->initiatorname, (prf_isid) ? &i_buf[0] : ""); 2853 nacl->initiatorname, (prf_isid) ? &i_buf[0] : "");
2843 /* 2854 /*
2844 * For PREEMPT_AND_ABORT, add the preempting reservation's 2855 * For PREEMPT_AND_ABORT, add the preempting reservation's
@@ -2876,7 +2887,7 @@ static void core_scsi3_release_preempt_and_abort(
2876 2887
2877static sense_reason_t 2888static sense_reason_t
2878core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key, 2889core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
2879 u64 sa_res_key, int abort) 2890 u64 sa_res_key, enum preempt_type preempt_type)
2880{ 2891{
2881 struct se_device *dev = cmd->se_dev; 2892 struct se_device *dev = cmd->se_dev;
2882 struct se_node_acl *pr_reg_nacl; 2893 struct se_node_acl *pr_reg_nacl;
@@ -2896,7 +2907,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
2896 if (!pr_reg_n) { 2907 if (!pr_reg_n) {
2897 pr_err("SPC-3 PR: Unable to locate" 2908 pr_err("SPC-3 PR: Unable to locate"
2898 " PR_REGISTERED *pr_reg for PREEMPT%s\n", 2909 " PR_REGISTERED *pr_reg for PREEMPT%s\n",
2899 (abort) ? "_AND_ABORT" : ""); 2910 (preempt_type == PREEMPT_AND_ABORT) ? "_AND_ABORT" : "");
2900 return TCM_RESERVATION_CONFLICT; 2911 return TCM_RESERVATION_CONFLICT;
2901 } 2912 }
2902 if (pr_reg_n->pr_res_key != res_key) { 2913 if (pr_reg_n->pr_res_key != res_key) {
@@ -2965,7 +2976,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
2965 pr_reg_nacl = pr_reg->pr_reg_nacl; 2976 pr_reg_nacl = pr_reg->pr_reg_nacl;
2966 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun; 2977 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun;
2967 __core_scsi3_free_registration(dev, pr_reg, 2978 __core_scsi3_free_registration(dev, pr_reg,
2968 (abort) ? &preempt_and_abort_list : 2979 (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list :
2969 NULL, calling_it_nexus); 2980 NULL, calling_it_nexus);
2970 released_regs++; 2981 released_regs++;
2971 } else { 2982 } else {
@@ -2993,7 +3004,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
2993 pr_reg_nacl = pr_reg->pr_reg_nacl; 3004 pr_reg_nacl = pr_reg->pr_reg_nacl;
2994 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun; 3005 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun;
2995 __core_scsi3_free_registration(dev, pr_reg, 3006 __core_scsi3_free_registration(dev, pr_reg,
2996 (abort) ? &preempt_and_abort_list : 3007 (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list :
2997 NULL, 0); 3008 NULL, 0);
2998 released_regs++; 3009 released_regs++;
2999 } 3010 }
@@ -3022,10 +3033,10 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3022 */ 3033 */
3023 if (pr_res_holder && all_reg && !(sa_res_key)) { 3034 if (pr_res_holder && all_reg && !(sa_res_key)) {
3024 __core_scsi3_complete_pro_preempt(dev, pr_reg_n, 3035 __core_scsi3_complete_pro_preempt(dev, pr_reg_n,
3025 (abort) ? &preempt_and_abort_list : NULL, 3036 (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
3026 type, scope, abort); 3037 type, scope, preempt_type);
3027 3038
3028 if (abort) 3039 if (preempt_type == PREEMPT_AND_ABORT)
3029 core_scsi3_release_preempt_and_abort( 3040 core_scsi3_release_preempt_and_abort(
3030 &preempt_and_abort_list, pr_reg_n); 3041 &preempt_and_abort_list, pr_reg_n);
3031 } 3042 }
@@ -3036,7 +3047,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3036 &pr_reg_n->pr_aptpl_buf[0], 3047 &pr_reg_n->pr_aptpl_buf[0],
3037 pr_tmpl->pr_aptpl_buf_len)) { 3048 pr_tmpl->pr_aptpl_buf_len)) {
3038 pr_debug("SPC-3 PR: Updated APTPL" 3049 pr_debug("SPC-3 PR: Updated APTPL"
3039 " metadata for PREEMPT%s\n", (abort) ? 3050 " metadata for PREEMPT%s\n", (preempt_type == PREEMPT_AND_ABORT) ?
3040 "_AND_ABORT" : ""); 3051 "_AND_ABORT" : "");
3041 } 3052 }
3042 } 3053 }
@@ -3103,7 +3114,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3103 pr_reg_nacl = pr_reg->pr_reg_nacl; 3114 pr_reg_nacl = pr_reg->pr_reg_nacl;
3104 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun; 3115 pr_res_mapped_lun = pr_reg->pr_res_mapped_lun;
3105 __core_scsi3_free_registration(dev, pr_reg, 3116 __core_scsi3_free_registration(dev, pr_reg,
3106 (abort) ? &preempt_and_abort_list : NULL, 3117 (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
3107 calling_it_nexus); 3118 calling_it_nexus);
3108 /* 3119 /*
3109 * e) Establish a unit attention condition for the initiator 3120 * e) Establish a unit attention condition for the initiator
@@ -3120,8 +3131,8 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3120 * I_T nexus using the contents of the SCOPE and TYPE fields; 3131 * I_T nexus using the contents of the SCOPE and TYPE fields;
3121 */ 3132 */
3122 __core_scsi3_complete_pro_preempt(dev, pr_reg_n, 3133 __core_scsi3_complete_pro_preempt(dev, pr_reg_n,
3123 (abort) ? &preempt_and_abort_list : NULL, 3134 (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
3124 type, scope, abort); 3135 type, scope, preempt_type);
3125 /* 3136 /*
3126 * d) Process tasks as defined in 5.7.1; 3137 * d) Process tasks as defined in 5.7.1;
3127 * e) See above.. 3138 * e) See above..
@@ -3161,7 +3172,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3161 * been removed from the primary pr_reg list), except the 3172 * been removed from the primary pr_reg list), except the
3162 * new persistent reservation holder, the calling Initiator Port. 3173 * new persistent reservation holder, the calling Initiator Port.
3163 */ 3174 */
3164 if (abort) { 3175 if (preempt_type == PREEMPT_AND_ABORT) {
3165 core_tmr_lun_reset(dev, NULL, &preempt_and_abort_list, cmd); 3176 core_tmr_lun_reset(dev, NULL, &preempt_and_abort_list, cmd);
3166 core_scsi3_release_preempt_and_abort(&preempt_and_abort_list, 3177 core_scsi3_release_preempt_and_abort(&preempt_and_abort_list,
3167 pr_reg_n); 3178 pr_reg_n);
@@ -3172,7 +3183,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3172 &pr_reg_n->pr_aptpl_buf[0], 3183 &pr_reg_n->pr_aptpl_buf[0],
3173 pr_tmpl->pr_aptpl_buf_len)) { 3184 pr_tmpl->pr_aptpl_buf_len)) {
3174 pr_debug("SPC-3 PR: Updated APTPL metadata for PREEMPT" 3185 pr_debug("SPC-3 PR: Updated APTPL metadata for PREEMPT"
3175 "%s\n", abort ? "_AND_ABORT" : ""); 3186 "%s\n", (preempt_type == PREEMPT_AND_ABORT) ? "_AND_ABORT" : "");
3176 } 3187 }
3177 } 3188 }
3178 3189
@@ -3183,7 +3194,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
3183 3194
3184static sense_reason_t 3195static sense_reason_t
3185core_scsi3_emulate_pro_preempt(struct se_cmd *cmd, int type, int scope, 3196core_scsi3_emulate_pro_preempt(struct se_cmd *cmd, int type, int scope,
3186 u64 res_key, u64 sa_res_key, int abort) 3197 u64 res_key, u64 sa_res_key, enum preempt_type preempt_type)
3187{ 3198{
3188 switch (type) { 3199 switch (type) {
3189 case PR_TYPE_WRITE_EXCLUSIVE: 3200 case PR_TYPE_WRITE_EXCLUSIVE:
@@ -3193,10 +3204,10 @@ core_scsi3_emulate_pro_preempt(struct se_cmd *cmd, int type, int scope,
3193 case PR_TYPE_WRITE_EXCLUSIVE_ALLREG: 3204 case PR_TYPE_WRITE_EXCLUSIVE_ALLREG:
3194 case PR_TYPE_EXCLUSIVE_ACCESS_ALLREG: 3205 case PR_TYPE_EXCLUSIVE_ACCESS_ALLREG:
3195 return core_scsi3_pro_preempt(cmd, type, scope, res_key, 3206 return core_scsi3_pro_preempt(cmd, type, scope, res_key,
3196 sa_res_key, abort); 3207 sa_res_key, preempt_type);
3197 default: 3208 default:
3198 pr_err("SPC-3 PR: Unknown Service Action PREEMPT%s" 3209 pr_err("SPC-3 PR: Unknown Service Action PREEMPT%s"
3199 " Type: 0x%02x\n", (abort) ? "_AND_ABORT" : "", type); 3210 " Type: 0x%02x\n", (preempt_type == PREEMPT_AND_ABORT) ? "_AND_ABORT" : "", type);
3200 return TCM_INVALID_CDB_FIELD; 3211 return TCM_INVALID_CDB_FIELD;
3201 } 3212 }
3202} 3213}
@@ -3752,7 +3763,7 @@ target_scsi3_emulate_pr_out(struct se_cmd *cmd)
3752 switch (sa) { 3763 switch (sa) {
3753 case PRO_REGISTER: 3764 case PRO_REGISTER:
3754 ret = core_scsi3_emulate_pro_register(cmd, 3765 ret = core_scsi3_emulate_pro_register(cmd,
3755 res_key, sa_res_key, aptpl, all_tg_pt, spec_i_pt, 0); 3766 res_key, sa_res_key, aptpl, all_tg_pt, spec_i_pt, REGISTER);
3756 break; 3767 break;
3757 case PRO_RESERVE: 3768 case PRO_RESERVE:
3758 ret = core_scsi3_emulate_pro_reserve(cmd, type, scope, res_key); 3769 ret = core_scsi3_emulate_pro_reserve(cmd, type, scope, res_key);
@@ -3765,15 +3776,15 @@ target_scsi3_emulate_pr_out(struct se_cmd *cmd)
3765 break; 3776 break;
3766 case PRO_PREEMPT: 3777 case PRO_PREEMPT:
3767 ret = core_scsi3_emulate_pro_preempt(cmd, type, scope, 3778 ret = core_scsi3_emulate_pro_preempt(cmd, type, scope,
3768 res_key, sa_res_key, 0); 3779 res_key, sa_res_key, PREEMPT);
3769 break; 3780 break;
3770 case PRO_PREEMPT_AND_ABORT: 3781 case PRO_PREEMPT_AND_ABORT:
3771 ret = core_scsi3_emulate_pro_preempt(cmd, type, scope, 3782 ret = core_scsi3_emulate_pro_preempt(cmd, type, scope,
3772 res_key, sa_res_key, 1); 3783 res_key, sa_res_key, PREEMPT_AND_ABORT);
3773 break; 3784 break;
3774 case PRO_REGISTER_AND_IGNORE_EXISTING_KEY: 3785 case PRO_REGISTER_AND_IGNORE_EXISTING_KEY:
3775 ret = core_scsi3_emulate_pro_register(cmd, 3786 ret = core_scsi3_emulate_pro_register(cmd,
3776 0, sa_res_key, aptpl, all_tg_pt, spec_i_pt, 1); 3787 0, sa_res_key, aptpl, all_tg_pt, spec_i_pt, REGISTER_AND_IGNORE_EXISTING_KEY);
3777 break; 3788 break;
3778 case PRO_REGISTER_AND_MOVE: 3789 case PRO_REGISTER_AND_MOVE:
3779 ret = core_scsi3_emulate_pro_register_and_move(cmd, res_key, 3790 ret = core_scsi3_emulate_pro_register_and_move(cmd, res_key,