.releasepage = ll_releasepage,
.bmap = NULL
};
-
-static int wait_on_page_locked_range(struct address_space *mapping,
- pgoff_t start, pgoff_t end)
-{
- pgoff_t index;
- struct page *page;
- int ret = 0;
-
- if (end < start)
- return 0;
-
- for(index = start; index < end; index++) {
- page = find_get_page(mapping, index);
- if (page == NULL)
- continue;
-
- wait_on_page_locked(page);
- if (PageError(page))
- ret = -EIO;
- cond_resched();
- }
-
- /* Check for outstanding write errors */
- if (test_and_clear_bit(AS_ENOSPC, &mapping->flags))
- ret = -ENOSPC;
- if (test_and_clear_bit(AS_EIO, &mapping->flags))
- ret = -EIO;
-
- return ret;
-}
-
-int ll_sync_page_range(struct inode *inode, struct address_space *mapping,
- loff_t pos, size_t count)
-{
- pgoff_t start = pos >> CFS_PAGE_SHIFT;
- pgoff_t end = (pos + count - 1) >> CFS_PAGE_SHIFT;
- struct writeback_control wbc;
- int ret;
-
- wbc.sync_mode = WB_SYNC_ALL;
- wbc.nr_to_write = mapping->nrpages * 2;
-#ifdef HAVE_WB_RANGE_START
- wbc.range_start = start;
- wbc.range_end = end;
-#else
- wbc.start = start;
- wbc.end = end;
-#endif
- ret = generic_writepages(mapping, &wbc);
-
- if (ret == 0)
- ret = wait_on_page_locked_range(mapping, start, end);
- return ret;
-}
-