vfio/helpers: Refactor vfio_region_mmap() error handling
Move error handling code to the end of the function so that it can more easily be shared by new mmap failure conditions. No functional change intended. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
fa4e20defe
commit
49915c0d2c
@ -395,7 +395,7 @@ static void vfio_subregion_unmap(VFIORegion *region, int index)
|
||||
|
||||
int vfio_region_mmap(VFIORegion *region)
|
||||
{
|
||||
int i, prot = 0;
|
||||
int i, ret, prot = 0;
|
||||
char *name;
|
||||
|
||||
if (!region->mem) {
|
||||
@ -411,22 +411,8 @@ int vfio_region_mmap(VFIORegion *region)
|
||||
region->fd_offset +
|
||||
region->mmaps[i].offset);
|
||||
if (region->mmaps[i].mmap == MAP_FAILED) {
|
||||
int ret = -errno;
|
||||
|
||||
trace_vfio_region_mmap_fault(memory_region_name(region->mem), i,
|
||||
region->fd_offset +
|
||||
region->mmaps[i].offset,
|
||||
region->fd_offset +
|
||||
region->mmaps[i].offset +
|
||||
region->mmaps[i].size - 1, ret);
|
||||
|
||||
region->mmaps[i].mmap = NULL;
|
||||
|
||||
for (i--; i >= 0; i--) {
|
||||
vfio_subregion_unmap(region, i);
|
||||
}
|
||||
|
||||
return ret;
|
||||
ret = -errno;
|
||||
goto no_mmap;
|
||||
}
|
||||
|
||||
name = g_strdup_printf("%s mmaps[%d]",
|
||||
@ -446,6 +432,20 @@ int vfio_region_mmap(VFIORegion *region)
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
no_mmap:
|
||||
trace_vfio_region_mmap_fault(memory_region_name(region->mem), i,
|
||||
region->fd_offset + region->mmaps[i].offset,
|
||||
region->fd_offset + region->mmaps[i].offset +
|
||||
region->mmaps[i].size - 1, ret);
|
||||
|
||||
region->mmaps[i].mmap = NULL;
|
||||
|
||||
for (i--; i >= 0; i--) {
|
||||
vfio_subregion_unmap(region, i);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void vfio_region_unmap(VFIORegion *region)
|
||||
|
Loading…
Reference in New Issue
Block a user