Merge branch 'master'
This commit is contained in:
43
mm/filemap.c
43
mm/filemap.c
@@ -29,7 +29,10 @@
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/security.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/cpuset.h>
|
||||
#include "filemap.h"
|
||||
#include "internal.h"
|
||||
|
||||
/*
|
||||
* FIXME: remove all knowledge of the buffer layer from the core VM
|
||||
*/
|
||||
@@ -172,7 +175,7 @@ static int sync_page(void *word)
|
||||
* dirty pages that lie within the byte offsets <start, end>
|
||||
* @mapping: address space structure to write
|
||||
* @start: offset in bytes where the range starts
|
||||
* @end: offset in bytes where the range ends
|
||||
* @end: offset in bytes where the range ends (inclusive)
|
||||
* @sync_mode: enable synchronous operation
|
||||
*
|
||||
* If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
|
||||
@@ -180,8 +183,8 @@ static int sync_page(void *word)
|
||||
* these two operations is that if a dirty page/buffer is encountered, it must
|
||||
* be waited upon, and not just skipped over.
|
||||
*/
|
||||
static int __filemap_fdatawrite_range(struct address_space *mapping,
|
||||
loff_t start, loff_t end, int sync_mode)
|
||||
int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
|
||||
loff_t end, int sync_mode)
|
||||
{
|
||||
int ret;
|
||||
struct writeback_control wbc = {
|
||||
@@ -210,8 +213,8 @@ int filemap_fdatawrite(struct address_space *mapping)
|
||||
}
|
||||
EXPORT_SYMBOL(filemap_fdatawrite);
|
||||
|
||||
static int filemap_fdatawrite_range(struct address_space *mapping,
|
||||
loff_t start, loff_t end)
|
||||
static int filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
|
||||
loff_t end)
|
||||
{
|
||||
return __filemap_fdatawrite_range(mapping, start, end, WB_SYNC_ALL);
|
||||
}
|
||||
@@ -230,7 +233,7 @@ EXPORT_SYMBOL(filemap_flush);
|
||||
* Wait for writeback to complete against pages indexed by start->end
|
||||
* inclusive
|
||||
*/
|
||||
static int wait_on_page_writeback_range(struct address_space *mapping,
|
||||
int wait_on_page_writeback_range(struct address_space *mapping,
|
||||
pgoff_t start, pgoff_t end)
|
||||
{
|
||||
struct pagevec pvec;
|
||||
@@ -365,6 +368,12 @@ int filemap_write_and_wait(struct address_space *mapping)
|
||||
}
|
||||
EXPORT_SYMBOL(filemap_write_and_wait);
|
||||
|
||||
/*
|
||||
* Write out and wait upon file offsets lstart->lend, inclusive.
|
||||
*
|
||||
* Note that `lend' is inclusive (describes the last byte to be written) so
|
||||
* that this function can be used to write to the very end-of-file (end = -1).
|
||||
*/
|
||||
int filemap_write_and_wait_range(struct address_space *mapping,
|
||||
loff_t lstart, loff_t lend)
|
||||
{
|
||||
@@ -425,6 +434,28 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
struct page *page_cache_alloc(struct address_space *x)
|
||||
{
|
||||
if (cpuset_do_page_mem_spread()) {
|
||||
int n = cpuset_mem_spread_node();
|
||||
return alloc_pages_node(n, mapping_gfp_mask(x), 0);
|
||||
}
|
||||
return alloc_pages(mapping_gfp_mask(x), 0);
|
||||
}
|
||||
EXPORT_SYMBOL(page_cache_alloc);
|
||||
|
||||
struct page *page_cache_alloc_cold(struct address_space *x)
|
||||
{
|
||||
if (cpuset_do_page_mem_spread()) {
|
||||
int n = cpuset_mem_spread_node();
|
||||
return alloc_pages_node(n, mapping_gfp_mask(x)|__GFP_COLD, 0);
|
||||
}
|
||||
return alloc_pages(mapping_gfp_mask(x)|__GFP_COLD, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(page_cache_alloc_cold);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* In order to wait for pages to become available there must be
|
||||
* waitqueues associated with pages. By using a hash table of
|
||||
|
Reference in New Issue
Block a user