target: Cleanup transport_kunmap_data_sg()
authorAndy Grover <agrover@redhat.com>
Thu, 9 Feb 2012 20:18:06 +0000 (12:18 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sat, 25 Feb 2012 22:37:48 +0000 (14:37 -0800)
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>
drivers/target/target_core_transport.c

index 42da7a30072943a5c2a1b706b8f8150b5c44f053..1520dd2dd7184912a99bffe9abfe20f33c6ab527 100644 (file)
@@ -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;