Jason Gunthorpe <jgg@xxxxxxxxxx> wrote: > if (cleanup_flags & PAGE_CLEANUP_UNPIN) > gup_put_folio(folio, 1, true); > else if (cleanup_flags & PAGE_CLEANUP_PUT) > gup_put_folio(folio, 1, false); gup_put_folio() doesn't take a bool - it takes FOLL_PIN and FOLL_GET: static void gup_put_folio(struct folio *folio, int refs, unsigned int flags) though I could do: if (cleanup_flags & PAGE_CLEANUP_UNPIN) gup_put_folio(folio, 1, FOLL_PIN); else if (cleanup_flags & PAGE_CLEANUP_PUT) gup_put_folio(folio, 1, FOLL_GET); But the reason I wrote it like this: gup_flags |= cleanup_flags & PAGE_CLEANUP_UNPIN ? FOLL_PIN : 0; gup_flags |= cleanup_flags & PAGE_CLEANUP_PUT ? FOLL_GET : 0; is that if PAGE_CLEANUP_UNPIN == FOLL_PIN and PAGE_CLEANUP_PUT == FOLL_GET, the C compiler optimiser should be able to turn all of that into a single AND instruction. David