• Linus Torvalds's avatar
    Revert "mm/gup: remove try_get_page(), call try_get_compound_head() directly" · cd1adf1b
    Linus Torvalds authored
    This reverts commit 9857a17f.
    
    That commit was completely broken, and I should have caught on to it
    earlier.  But happily, the kernel test robot noticed the breakage fairly
    quickly.
    
    The breakage is because "try_get_page()" is about avoiding the page
    reference count overflow case, but is otherwise the exact same as a
    plain "get_page()".
    
    In contrast, "try_get_compound_head()" is an entirely different beast,
    and uses __page_cache_add_speculative() because it's not just about the
    page reference count, but also about possibly racing with the underlying
    page going away.
    
    So all the commentary about how
    
     "try_get_page() has fallen a little behind in terms of maintenance,
      try_get_compound_head() handles speculative page references more
      thoroughly"
    
    was just completely wrong: yes, try_get_compound_head() handles
    speculative page references, but the point is that try_get_page() does
    not, and must not...
    cd1adf1b
pipe.c 34.6 KB