]> xenbits.xensource.com Git - xen.git/commitdiff
Fix error recovery path in __gnttab_map_grant_ref
authorHaoyu Zhang <haoyu.zhang@huawei.com>
Mon, 6 Feb 2012 21:23:41 +0000 (13:23 -0800)
committerHaoyu Zhang <haoyu.zhang@huawei.com>
Mon, 6 Feb 2012 21:23:41 +0000 (13:23 -0800)
In file grant_table.c function __gnttab_map_grant_ref, if
__get_paged_frame failed, the effect of _set_status  previously
called should be rollback, so the flag GTF_reading and _GTF_writing
will be recovered.

Signed-off-by: Haoyu Zhang <haoyu.zhang@huawei.com>
Signed-off-by: Liang Wang <hzwangliang.wang@huawei.com>
Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Keir Fraser <keir@xen.org>
xen/common/grant_table.c

index 858d991d3da858962717d842fb7be791796069c2..6bf611f657544b3231b27ed2869e2f10f700bb72 100644 (file)
@@ -576,7 +576,7 @@ __gnttab_map_grant_ref(
             if ( rc != GNTST_okay )
             {
                 gfn = INVALID_GFN;
-                goto unlock_out;
+                goto unlock_out_clear;
             }
             act->gfn = gfn;
             act->domid = ld->domain_id;
@@ -734,7 +734,8 @@ __gnttab_map_grant_ref(
     if ( op->flags & GNTMAP_host_map )
         act->pin -= (op->flags & GNTMAP_readonly) ?
             GNTPIN_hstr_inc : GNTPIN_hstw_inc;
-
+ unlock_out_clear:
     if ( !(op->flags & GNTMAP_readonly) &&
          !(act->pin & (GNTPIN_hstw_mask|GNTPIN_devw_mask)) )
         gnttab_clear_flag(_GTF_writing, status);