Hi,

> +             if (is_file_hugepages(memfd)) {
> +                     hpstate = hstate_file(memfd);
> +                     pgoff = list[i].offset >> huge_page_shift(hpstate);
> +                     subpgoff = (list[i].offset &
> +                                 ~huge_page_mask(hpstate)) >> PAGE_SHIFT;
> +                     hpage = find_get_page_flags(
> +                                     file_inode(memfd)->i_mapping,
> +                                     pgoff, FGP_ACCESSED);
> +                     if (IS_ERR(hpage)) {
> +                             ret = PTR_ERR(hpage);
>                               goto err;
>                       }
> +             }
> +             for (pgidx = 0; pgidx < pgcnt; pgidx++) {
> +                     if (is_file_hugepages(memfd)) {
> +                             page = hpage + subpgoff + pgidx;
> +                             get_page(page);

Hmm.  Does this work in case the page range spans multiple huge pages?

take care,
  Gerd

Reply via email to