diff options
author | Andy Grover <agrover@redhat.com> | 2012-01-16 19:57:08 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-01-18 03:35:58 -0500 |
commit | 4949314c7283ea4f9ade182ca599583b89f7edd6 (patch) | |
tree | bbd2316996bc2f19c1b3a8c24f8591f12d2330fa /drivers/target/target_core_alua.c | |
parent | e8904dc5008ef92f0f62391d6557f03f921eeb32 (diff) |
target: Allow control CDBs with data > 1 page
We need to handle >1 page control cdbs, so extend the code to do a vmap
if bigger than 1 page. It seems like kmap() is still preferable if just
a page, fewer TLB shootdowns(?), so keep using that when possible.
Rename function pair for their new scope.
Signed-off-by: Andy Grover <agrover@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_alua.c')
-rw-r--r-- | drivers/target/target_core_alua.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c index 1b1edd14f4b..01a2691dfb4 100644 --- a/drivers/target/target_core_alua.c +++ b/drivers/target/target_core_alua.c | |||
@@ -78,7 +78,7 @@ int target_emulate_report_target_port_groups(struct se_task *task) | |||
78 | return -EINVAL; | 78 | return -EINVAL; |
79 | } | 79 | } |
80 | 80 | ||
81 | buf = transport_kmap_first_data_page(cmd); | 81 | buf = transport_kmap_data_sg(cmd); |
82 | 82 | ||
83 | spin_lock(&su_dev->t10_alua.tg_pt_gps_lock); | 83 | spin_lock(&su_dev->t10_alua.tg_pt_gps_lock); |
84 | list_for_each_entry(tg_pt_gp, &su_dev->t10_alua.tg_pt_gps_list, | 84 | list_for_each_entry(tg_pt_gp, &su_dev->t10_alua.tg_pt_gps_list, |
@@ -163,7 +163,7 @@ int target_emulate_report_target_port_groups(struct se_task *task) | |||
163 | buf[2] = ((rd_len >> 8) & 0xff); | 163 | buf[2] = ((rd_len >> 8) & 0xff); |
164 | buf[3] = (rd_len & 0xff); | 164 | buf[3] = (rd_len & 0xff); |
165 | 165 | ||
166 | transport_kunmap_first_data_page(cmd); | 166 | transport_kunmap_data_sg(cmd); |
167 | 167 | ||
168 | task->task_scsi_status = GOOD; | 168 | task->task_scsi_status = GOOD; |
169 | transport_complete_task(task, 1); | 169 | transport_complete_task(task, 1); |
@@ -194,7 +194,7 @@ int target_emulate_set_target_port_groups(struct se_task *task) | |||
194 | cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | 194 | cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; |
195 | return -EINVAL; | 195 | return -EINVAL; |
196 | } | 196 | } |
197 | buf = transport_kmap_first_data_page(cmd); | 197 | buf = transport_kmap_data_sg(cmd); |
198 | 198 | ||
199 | /* | 199 | /* |
200 | * Determine if explict ALUA via SET_TARGET_PORT_GROUPS is allowed | 200 | * Determine if explict ALUA via SET_TARGET_PORT_GROUPS is allowed |
@@ -351,7 +351,7 @@ int target_emulate_set_target_port_groups(struct se_task *task) | |||
351 | } | 351 | } |
352 | 352 | ||
353 | out: | 353 | out: |
354 | transport_kunmap_first_data_page(cmd); | 354 | transport_kunmap_data_sg(cmd); |
355 | task->task_scsi_status = GOOD; | 355 | task->task_scsi_status = GOOD; |
356 | transport_complete_task(task, 1); | 356 | transport_complete_task(task, 1); |
357 | return 0; | 357 | return 0; |