diff options
author | Daniel De Graaf <dgdegra@tycho.nsa.gov> | 2011-02-09 15:11:59 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-02-14 14:16:20 -0500 |
commit | 84e4075d60fc8f1c0b937765620bc784dd0c3d39 (patch) | |
tree | 1d337c56f68d0e1a7ca9db3749dcaead46b35ba3 /drivers/xen/gntdev.c | |
parent | 0ea22f072fb1b3da4307573c280ce904f0bf1589 (diff) |
xen-gntdev: Use map->vma for checking map validity
The is_mapped flag used to be set at the completion of the map operation,
but was not checked in all error paths. Use map->vma instead, which will
now be cleared if the initial grant mapping fails.
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/gntdev.c')
-rw-r--r-- | drivers/xen/gntdev.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c index 75f8037c9833..4ca4262d3d19 100644 --- a/drivers/xen/gntdev.c +++ b/drivers/xen/gntdev.c @@ -77,7 +77,6 @@ struct grant_map { int index; int count; int flags; - int is_mapped; atomic_t users; struct unmap_notify notify; struct ioctl_gntdev_grant_ref *grants; @@ -322,7 +321,6 @@ static void gntdev_vma_close(struct vm_area_struct *vma) struct grant_map *map = vma->vm_private_data; pr_debug("close %p\n", vma); - map->is_mapped = 0; map->vma = NULL; vma->vm_private_data = NULL; gntdev_put_map(map); @@ -347,8 +345,6 @@ static void mn_invl_range_start(struct mmu_notifier *mn, list_for_each_entry(map, &priv->maps, next) { if (!map->vma) continue; - if (!map->is_mapped) - continue; if (map->vma->vm_start >= end) continue; if (map->vma->vm_end <= start) @@ -663,8 +659,6 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma) if (err) goto out_put_map; - map->is_mapped = 1; - if (!use_ptemod) { for (i = 0; i < count; i++) { err = vm_insert_page(vma, vma->vm_start + i*PAGE_SIZE, @@ -681,6 +675,8 @@ unlock_out: return err; out_put_map: + if (use_ptemod) + map->vma = NULL; gntdev_put_map(map); return err; } |