summaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorAndy Grover2012-02-09 21:18:06 +0100
committerNicholas Bellinger2012-02-25 23:37:48 +0100
commita1edf9cf6d1efed2981fcf6e4caa704fbb1bd093 (patch)
treee9b0c6585a2028844d790efae0bf3ca15e4276cf /drivers/target
parenttcm_loop: switch to using transport_handle_cdb_direct (diff)
downloadkernel-qcow2-linux-a1edf9cf6d1efed2981fcf6e4caa704fbb1bd093.tar.gz
kernel-qcow2-linux-a1edf9cf6d1efed2981fcf6e4caa704fbb1bd093.tar.xz
kernel-qcow2-linux-a1edf9cf6d1efed2981fcf6e4caa704fbb1bd093.zip
target: Cleanup transport_kunmap_data_sg()
This code isn't broken per se, but it's scary to look at! It looks like in the t_data_nents==1 case we're doing both a kunmap and a vunmap, what's saving us is that t_data_vmap in this case is 0, so vunmap doesn't do anything. Return after kunmap, so the handling of the three cases does not overlap. Signed-off-by: Andy Grover <agrover@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/target_core_transport.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 42da7a300729..1520dd2dd718 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -3546,10 +3546,12 @@ EXPORT_SYMBOL(transport_kmap_data_sg);
void transport_kunmap_data_sg(struct se_cmd *cmd)
{
- if (!cmd->t_data_nents)
+ if (!cmd->t_data_nents) {
return;
- else if (cmd->t_data_nents == 1)
+ } else if (cmd->t_data_nents == 1) {
kunmap(sg_page(cmd->t_data_sg));
+ return;
+ }
vunmap(cmd->t_data_vmap);
cmd->t_data_vmap = NULL;