Skip to content
  • Linus Torvalds's avatar
    mm: add 'try_get_page()' helper function · 2a280d88
    Linus Torvalds authored
    commit 88b1a17d
    
     upstream.
    
    This is the same as the traditional 'get_page()' function, but instead
    of unconditionally incrementing the reference count of the page, it only
    does so if the count was "safe".  It returns whether the reference count
    was incremented (and is marked __must_check, since the caller obviously
    has to be aware of it).
    
    Also like 'get_page()', you can't use this function unless you already
    had a reference to the page.  The intent is that you can use this
    exactly like get_page(), but in situations where you want to limit the
    maximum reference count.
    
    The code currently does an unconditional WARN_ON_ONCE() if we ever hit
    the reference count issues (either zero or negative), as a notification
    that the conditional non-increment actually happened.
    
    NOTE! The count access for the "safety" check is inherently racy, but
    that doesn't matter since the buffer we use is basically half the range
    of the reference count (ie we look at the sign of the count).
    
    Acked-by: default avatarMatthew Wilcox <willy@infradead.org>
    Cc: Jann Horn <jannh@google.com>
    Cc: stable@kernel.org
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2a280d88