pgoff_t start_pgoff, pgoff_t end_pgoff);
extern vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf);
-/* mm/page-writeback.c */
-int __must_check write_one_page(struct page *page);
-void task_dirty_inc(struct task_struct *tsk);
-
extern unsigned long stack_guard_gap;
/* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */
extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
}
bool pageset_clear_dirty_for_io(struct pageset *pageset);
bool clear_page_dirty_for_io(struct page *page);
+int __must_check pageset_write_one(struct pageset *pageset);
+static inline int __must_check write_one_page(struct page *page)
+{
+ return pageset_write_one(page_pageset(page));
+}
int __set_page_dirty_nobuffers(struct page *page);
int __set_page_dirty_no_writeback(struct page *page);
}
/**
- * write_one_page - write out a single page and wait on I/O
- * @page: the page to write
+ * pageset_write_one - write out a single pageset and wait on I/O.
+ * @pageset: The pageset to write.
*
- * The page must be locked by the caller and will be unlocked upon return.
+ * The pageset must be locked by the caller and will be unlocked upon return.
*
* Note that the mapping's AS_EIO/AS_ENOSPC flags will be cleared when this
* function returns.
*
* Return: %0 on success, negative error code otherwise
*/
-int write_one_page(struct page *page)
+int pageset_write_one(struct pageset *pageset)
{
- struct address_space *mapping = page->mapping;
+ struct address_space *mapping = pageset->mapping;
int ret = 0;
struct writeback_control wbc = {
.sync_mode = WB_SYNC_ALL,
- .nr_to_write = 1,
+ .nr_to_write = pageset_nr_pages(pageset),
};
- BUG_ON(!PageLocked(page));
+ BUG_ON(!pageset_test_locked(pageset));
- wait_on_page_writeback(page);
+ pageset_wait_writeback(pageset);
- if (clear_page_dirty_for_io(page)) {
- get_page(page);
- ret = mapping->a_ops->writepage(page, &wbc);
+ if (pageset_clear_dirty_for_io(pageset)) {
+ pageset_get(pageset);
+ ret = mapping->a_ops->writepage(&pageset->page, &wbc);
if (ret == 0)
- wait_on_page_writeback(page);
- put_page(page);
+ pageset_wait_writeback(pageset);
+ pageset_put(pageset);
} else {
- unlock_page(page);
+ pageset_unlock(pageset);
}
if (!ret)
ret = filemap_check_errors(mapping);
return ret;
}
-EXPORT_SYMBOL(write_one_page);
+EXPORT_SYMBOL(pageset_write_one);
/*
* For address_spaces which do not use buffers nor write back.