/* Is there a pagecache struct page at the given (mapping, offset) tuple? If yes, increment its refcount and return it; if no, return NULL.  */
struct page* find_get_page(struct address_space *mapping, pgoff_t offset)
/* Is there a pagecache struct page at the given (mapping, offset) tuple? If yes, increment its refcount and return it; if no, return NULL.  */
struct page* find_get_page(struct address_space *mapping, pgoff_t offset)
{
	void **pagep;
	struct page *page;
	rcu_read_lock();
repeat:
	page = NULL;
	pagep = radix_tree_lookup_slot(&mapping->page_tree, offset);
	if (pagep) {
		page = radix_tree_deref_slot(pagep);
		if (unlikely(!page || page == RADIX_TREE_RETRY))
			goto repeat;
		if (!page_cache_get_speculative(page))
			goto repeat;
		if (unlikely(page != *pagep)) {
			page_cache_release(page);
			goto repeat;
		}
	}
	rcu_read_unlock();
	return page;
}