.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /******************************************************************************* |
---|
2 | 3 | * Filename: target_core_alua.c |
---|
3 | 4 | * |
---|
.. | .. |
---|
6 | 7 | * (c) Copyright 2009-2013 Datera, Inc. |
---|
7 | 8 | * |
---|
8 | 9 | * Nicholas A. Bellinger <nab@kernel.org> |
---|
9 | | - * |
---|
10 | | - * This program is free software; you can redistribute it and/or modify |
---|
11 | | - * it under the terms of the GNU General Public License as published by |
---|
12 | | - * the Free Software Foundation; either version 2 of the License, or |
---|
13 | | - * (at your option) any later version. |
---|
14 | | - * |
---|
15 | | - * This program is distributed in the hope that it will be useful, |
---|
16 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
17 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
18 | | - * GNU General Public License for more details. |
---|
19 | | - * |
---|
20 | | - * You should have received a copy of the GNU General Public License |
---|
21 | | - * along with this program; if not, write to the Free Software |
---|
22 | | - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
23 | 10 | * |
---|
24 | 11 | ******************************************************************************/ |
---|
25 | 12 | |
---|
.. | .. |
---|
268 | 255 | } |
---|
269 | 256 | transport_kunmap_data_sg(cmd); |
---|
270 | 257 | |
---|
271 | | - target_complete_cmd(cmd, GOOD); |
---|
| 258 | + target_complete_cmd_with_length(cmd, GOOD, rd_len + 4); |
---|
272 | 259 | return 0; |
---|
273 | 260 | } |
---|
274 | 261 | |
---|
.. | .. |
---|
451 | 438 | pr_debug("[%s]: ALUA TG Port not available, " |
---|
452 | 439 | "SenseKey: NOT_READY, ASC/ASCQ: " |
---|
453 | 440 | "0x04/0x%02x\n", |
---|
454 | | - cmd->se_tfo->get_fabric_name(), alua_ascq); |
---|
| 441 | + cmd->se_tfo->fabric_name, alua_ascq); |
---|
455 | 442 | |
---|
456 | 443 | cmd->scsi_asc = 0x04; |
---|
457 | 444 | cmd->scsi_ascq = alua_ascq; |
---|
.. | .. |
---|
690 | 677 | |
---|
691 | 678 | if (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE) |
---|
692 | 679 | return 0; |
---|
693 | | - if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA) |
---|
| 680 | + if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA) |
---|
694 | 681 | return 0; |
---|
695 | 682 | |
---|
696 | 683 | /* |
---|
.. | .. |
---|
910 | 897 | return (ret < 0) ? -EIO : 0; |
---|
911 | 898 | } |
---|
912 | 899 | |
---|
913 | | -/* |
---|
914 | | - * Called with tg_pt_gp->tg_pt_gp_transition_mutex held |
---|
915 | | - */ |
---|
916 | 900 | static int core_alua_update_tpg_primary_metadata( |
---|
917 | 901 | struct t10_alua_tg_pt_gp *tg_pt_gp) |
---|
918 | 902 | { |
---|
.. | .. |
---|
920 | 904 | struct t10_wwn *wwn = &tg_pt_gp->tg_pt_gp_dev->t10_wwn; |
---|
921 | 905 | char *path; |
---|
922 | 906 | int len, rc; |
---|
| 907 | + |
---|
| 908 | + lockdep_assert_held(&tg_pt_gp->tg_pt_gp_transition_mutex); |
---|
923 | 909 | |
---|
924 | 910 | md_buf = kzalloc(ALUA_MD_BUF_LEN, GFP_KERNEL); |
---|
925 | 911 | if (!md_buf) { |
---|
.. | .. |
---|
1104 | 1090 | struct t10_alua_tg_pt_gp *tg_pt_gp; |
---|
1105 | 1091 | int primary, valid_states, rc = 0; |
---|
1106 | 1092 | |
---|
1107 | | - if (l_dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA) |
---|
| 1093 | + if (l_dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA) |
---|
1108 | 1094 | return -ENODEV; |
---|
1109 | 1095 | |
---|
1110 | 1096 | valid_states = l_tg_pt_gp->tg_pt_gp_alua_supported_states; |
---|
.. | .. |
---|
1229 | 1215 | |
---|
1230 | 1216 | if (se_tpg->se_tpg_tfo->tpg_get_tag != NULL) { |
---|
1231 | 1217 | path = kasprintf(GFP_KERNEL, "%s/alua/%s/%s+%hu/lun_%llu", |
---|
1232 | | - db_root, se_tpg->se_tpg_tfo->get_fabric_name(), |
---|
| 1218 | + db_root, se_tpg->se_tpg_tfo->fabric_name, |
---|
1233 | 1219 | se_tpg->se_tpg_tfo->tpg_get_wwn(se_tpg), |
---|
1234 | 1220 | se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg), |
---|
1235 | 1221 | lun->unpacked_lun); |
---|
1236 | 1222 | } else { |
---|
1237 | 1223 | path = kasprintf(GFP_KERNEL, "%s/alua/%s/%s/lun_%llu", |
---|
1238 | | - db_root, se_tpg->se_tpg_tfo->get_fabric_name(), |
---|
| 1224 | + db_root, se_tpg->se_tpg_tfo->fabric_name, |
---|
1239 | 1225 | se_tpg->se_tpg_tfo->tpg_get_wwn(se_tpg), |
---|
1240 | 1226 | lun->unpacked_lun); |
---|
1241 | 1227 | } |
---|
.. | .. |
---|
1760 | 1746 | * can be made while we are releasing struct t10_alua_tg_pt_gp. |
---|
1761 | 1747 | */ |
---|
1762 | 1748 | spin_lock(&dev->t10_alua.tg_pt_gps_lock); |
---|
1763 | | - list_del(&tg_pt_gp->tg_pt_gp_list); |
---|
1764 | | - dev->t10_alua.alua_tg_pt_gps_counter--; |
---|
| 1749 | + if (tg_pt_gp->tg_pt_gp_valid_id) { |
---|
| 1750 | + list_del(&tg_pt_gp->tg_pt_gp_list); |
---|
| 1751 | + dev->t10_alua.alua_tg_pt_gps_count--; |
---|
| 1752 | + } |
---|
1765 | 1753 | spin_unlock(&dev->t10_alua.tg_pt_gps_lock); |
---|
1766 | 1754 | |
---|
1767 | 1755 | /* |
---|
.. | .. |
---|
1931 | 1919 | unsigned char buf[TG_PT_GROUP_NAME_BUF]; |
---|
1932 | 1920 | int move = 0; |
---|
1933 | 1921 | |
---|
1934 | | - if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA || |
---|
| 1922 | + if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA || |
---|
1935 | 1923 | (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE)) |
---|
1936 | 1924 | return -ENODEV; |
---|
1937 | 1925 | |
---|
.. | .. |
---|
2188 | 2176 | unsigned long tmp; |
---|
2189 | 2177 | int ret; |
---|
2190 | 2178 | |
---|
2191 | | - if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA || |
---|
| 2179 | + if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA || |
---|
2192 | 2180 | (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE)) |
---|
2193 | 2181 | return -ENODEV; |
---|
2194 | 2182 | |
---|
.. | .. |
---|
2274 | 2262 | |
---|
2275 | 2263 | int core_setup_alua(struct se_device *dev) |
---|
2276 | 2264 | { |
---|
2277 | | - if (!(dev->transport->transport_flags & |
---|
| 2265 | + if (!(dev->transport_flags & |
---|
2278 | 2266 | TRANSPORT_FLAG_PASSTHROUGH_ALUA) && |
---|
2279 | 2267 | !(dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE)) { |
---|
2280 | 2268 | struct t10_alua_lu_gp_member *lu_gp_mem; |
---|