Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > + bio_clear_flag(bio, BIO_PAGE_REFFED); > > .. and this should not be needed. Instead: > > > + cleanup_mode = iov_iter_extract_mode(iter, gup_flags); > > + if (cleanup_mode & FOLL_GET) > > + bio_set_flag(bio, BIO_PAGE_REFFED); > > + if (cleanup_mode & FOLL_PIN) > > + bio_set_flag(bio, BIO_PAGE_PINNED); > > We could warn if a not match flag is set here if we really care. Um... With these patches, BIO_PAGE_REFFED is set by default when the bio is initialised otherwise every user of struct bio that currently adds pages directly (assuming there are any) rather than going through bio_iov_iter_get_pages() will have to set the flag, hence the need to clear it. Actually, I could do: if (!(cleanup_mode & FOLL_GET)) bio_clear_flag(bio, BIO_PAGE_REFFED); if (cleanup_mode & FOLL_PIN) bio_set_flag(bio, BIO_PAGE_PINNED); which should also work. David