return mapping->nrpages;
 }
 
+static bool filemap_range_has_writeback(struct address_space *mapping,
+                                       loff_t start_byte, loff_t end_byte)
+{
+       XA_STATE(xas, &mapping->i_pages, start_byte >> PAGE_SHIFT);
+       pgoff_t max = end_byte >> PAGE_SHIFT;
+       struct page *page;
+
+       if (end_byte < start_byte)
+               return false;
+
+       rcu_read_lock();
+       xas_for_each(&xas, page, max) {
+               if (xas_retry(&xas, page))
+                       continue;
+               if (xa_is_value(page))
+                       continue;
+               if (PageDirty(page) || PageLocked(page) || PageWriteback(page))
+                       break;
+       }
+       rcu_read_unlock();
+       return page != NULL;
+
+}
+
 /**
  * filemap_range_needs_writeback - check if range potentially needs writeback
  * @mapping:           address space within which to check
 bool filemap_range_needs_writeback(struct address_space *mapping,
                                   loff_t start_byte, loff_t end_byte)
 {
-       XA_STATE(xas, &mapping->i_pages, start_byte >> PAGE_SHIFT);
-       pgoff_t max = end_byte >> PAGE_SHIFT;
-       struct page *page;
-
        if (!mapping_needs_writeback(mapping))
                return false;
        if (!mapping_tagged(mapping, PAGECACHE_TAG_DIRTY) &&
            !mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK))
                return false;
-       if (end_byte < start_byte)
-               return false;
-
-       rcu_read_lock();
-       xas_for_each(&xas, page, max) {
-               if (xas_retry(&xas, page))
-                       continue;
-               if (xa_is_value(page))
-                       continue;
-               if (PageDirty(page) || PageLocked(page) || PageWriteback(page))
-                       break;
-       }
-       rcu_read_unlock();
-       return page != NULL;
+       return filemap_range_has_writeback(mapping, start_byte, end_byte);
 }
 EXPORT_SYMBOL_GPL(filemap_range_needs_writeback);