-#ifndef HAVE_FILEMAP_FDATAWRITE_RANGE
-#include <linux/backing-dev.h> /* for mapping->backing_dev_info */
-static inline int filemap_fdatawrite_range(struct address_space *mapping,
- loff_t start, loff_t end)
-{
- int rc;
- struct writeback_control wbc = {
- .sync_mode = WB_SYNC_ALL,
- .nr_to_write = (end - start + PAGE_SIZE - 1) >> PAGE_SHIFT,
- };
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
- wbc.range_start = start;
- wbc.range_end = end;
-#else
- wbc.start = start;
- wbc.end = end;
-#endif
-
-#ifdef HAVE_MAPPING_CAP_WRITEBACK_DIRTY
- if (!mapping_cap_writeback_dirty(mapping))
- rc = 0;
-#else
- if (mapping->backing_dev_info->memory_backed)
- rc = 0;
-#endif
- /* do_writepages() */
- else if (mapping->a_ops->writepages)
- rc = mapping->a_ops->writepages(mapping, &wbc);
- else
- rc = generic_writepages(mapping, &wbc);
- return rc;
-}
-#else
-int filemap_fdatawrite_range(struct address_space *mapping,
- loff_t start, loff_t end);
-#endif /* HAVE_FILEMAP_FDATAWRITE_RANGE */