[libvirt] [PATCH] qemu: Make virFileFindHugeTLBFS fault tolerant

Jim Fehlig jfehlig at suse.com
Wed Aug 6 15:16:30 UTC 2014


Michal Privoznik wrote:
> Since commit be0782e1 we are parsing /proc/meminfo to find out the
> default huge page size. However, if the host we are running at does
> not support any huge pages (e.g. CONFIG_HUGETLB_PAGE is turned off),
> we will not successfully parse the meminfo file and hence the whole
> qemu driver init process fails. Moreover, the default huge page size
> is needed if and only if there's at least one hugetlbfs mount point.
> So the fix consists of moving the virFileGetDefaultHugepageSize
> function call after the first hugetlbfs mount point is found.
>
> With this fix, we fail to start with one or more hugetlbfs mounts and
> malformed meminfo file, but that's expected (how can one mount
> hugetlbfs without kernel supporting huge pages?). Workaround in that
> case is to umount all the hugetlbfs mounts.
>   

Makes sense.

> Reported-by: Jim Fehlig <jfehlig at suse.com>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/util/virfile.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/virfile.c b/src/util/virfile.c
> index 9863fd0..f9efc65 100644
> --- a/src/util/virfile.c
> +++ b/src/util/virfile.c
> @@ -2990,10 +2990,7 @@ virFileFindHugeTLBFS(virHugeTLBFSPtr *ret_fs,
>      char mntbuf[1024];
>      virHugeTLBFSPtr fs = NULL;
>      size_t nfs = 0;
> -    unsigned long long default_hugepagesz;
> -
> -    if (virFileGetDefaultHugepageSize(&default_hugepagesz) < 0)
> -        goto cleanup;
> +    unsigned long long default_hugepagesz = 0;
>  
>      if (!(f = setmntent(PROC_MOUNTS, "r"))) {
>          virReportSystemError(errno,
> @@ -3019,6 +3016,10 @@ virFileFindHugeTLBFS(virHugeTLBFSPtr *ret_fs,
>          if (virFileGetHugepageSize(tmp->mnt_dir, &tmp->size) < 0)
>              goto cleanup;
>  
> +        if (!default_hugepagesz &&
> +            virFileGetDefaultHugepageSize(&default_hugepagesz) < 0)
> +            goto cleanup;
> +
>          tmp->deflt = tmp->size == default_hugepagesz;
>      }
>   

And it fixes the issue for me, thanks!  ACK #2 :-).

Regards,
Jim




More information about the libvir-list mailing list