"David Hildenbrand (Arm)" <[email protected]> writes:

> On 3/17/26 15:11, Kalyazin, Nikita wrote:
>> From: Nikita Kalyazin <[email protected]>
>>
>> Move the check for pinning closer to where the result is used.
>> No functional changes.
>>
>> Signed-off-by: Nikita Kalyazin <[email protected]>
>> ---
>>  mm/gup.c | 23 ++++++++++++-----------
>>  1 file changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/mm/gup.c b/mm/gup.c
>> index 5856d35be385..869d79c8daa4 100644
>> --- a/mm/gup.c
>> +++ b/mm/gup.c
>> @@ -2737,18 +2737,9 @@ EXPORT_SYMBOL(get_user_pages_unlocked);
>>   */
>>  static bool gup_fast_folio_allowed(struct folio *folio, unsigned int flags)
>>  {
>> -    bool reject_file_backed = false;
>>      struct address_space *mapping;
>>      unsigned long mapping_flags;
>>
>> -    /*
>> -     * If we aren't pinning then no problematic write can occur. A long term
>> -     * pin is the most egregious case so this is the one we disallow.
>> -     */
>> -    if ((flags & (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE)) ==
>> -        (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE))
>> -            reject_file_backed = true;
>> -
>>      /* We hold a folio reference, so we can safely access folio fields. */
>>      if (WARN_ON_ONCE(folio_test_slab(folio)))
>>              return false;
>> @@ -2793,8 +2784,18 @@ static bool gup_fast_folio_allowed(struct folio 
>> *folio, unsigned int flags)
>>       */
>>      if (secretmem_mapping(mapping))
>>              return false;
>> -    /* The only remaining allowed file system is shmem. */
>> -    return !reject_file_backed || shmem_mapping(mapping);
>> +
>> +    /*
>> +     * If we aren't pinning then no problematic write can occur. A writable
>> +     * long term pin is the most egregious case, so this is the one we
>> +     * allow only for ...
>> +     */
>> +    if ((flags & (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE)) !=
>> +        (FOLL_PIN | FOLL_LONGTERM | FOLL_WRITE))
>> +            return true;
>> +
>> +    /* ... hugetlb (which we allowed above already) and shared memory. */
>> +    return shmem_mapping(mapping);
>
> Acked-by: David Hildenbrand (Arm) <[email protected]>
>
> I'm wondering if it would be a good idea to check for a hugetlb mapping
> here instead of having the folio_test_hugetlb() check above.
>

I think it's nice that hugetlb folios are determined immediately to be
eligible for GUP-fast regardless of whether the folio is file-backed or
not.

> Something to ponder about :)
>
> --
> Cheers,
>
> David

Reply via email to