[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Only retry mapping pages when ENOENT is returned



On Fri, Dec 16, Adin Scannell wrote:

> # HG changeset patch
> # User Adin Scannell <adin@xxxxxxxxxxx>
> # Date 1324094033 18000
> # Node ID 14d42c7d8e0817040186cd01c46f034999fc5dff
> # Parent  9dcc8557a0cb676b84e6788e03ab596bcfda7143
> Only retry mapping pages when ENOENT is returned
> 
> If the return value from the ioctl() is not ENOENT, it's possible that err[i]
> will not be updated and libxc will just loop forever.  Although it's unlikely
> that err[i] would not be updated after the ioctl() gets through at least once,
> it's better to be defensive.

In linux-2.6.18-xen.hg the ioctl could in theory return -ENOMEM in a
later iteration and maybe even other values if the guest was destroyed
meanwhile. So checking also errno for ENOENT is good, because thats the
return code if any of the requested gfns is still in paged-out state.

Acked-by: Olaf Hering <olaf@xxxxxxxxx>

> diff -r 9dcc8557a0cb -r 14d42c7d8e08 tools/libxc/xc_linux_osdep.c
> --- a/tools/libxc/xc_linux_osdep.c
> +++ b/tools/libxc/xc_linux_osdep.c
> @@ -232,7 +232,7 @@ static void *linux_privcmd_map_foreign_b
>              do {
>                  usleep(100);
>                  rc = ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH_V2, &ioctlx);
> -            } while ( rc < 0 && err[i] == -ENOENT );
> +            } while ( rc < 0 && errno == ENOENT && err[i] == -ENOENT );
>          }
>      }
>  
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.