ocfs2: Add readahead support for CoW.
Add a new function ocfs2_readahead_for_cow so that we start readahead before we start our CoW. Signed-off-by: Tao Ma <tao.ma@oracle.com>
This commit is contained in:
parent
155027121f
commit
7b61cf54a2
1 changed files with 24 additions and 0 deletions
|
@ -3398,6 +3398,28 @@ static int ocfs2_replace_cow(struct ocfs2_cow_context *context)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ocfs2_readahead_for_cow(struct inode *inode,
|
||||||
|
struct file *file,
|
||||||
|
u32 start, u32 len)
|
||||||
|
{
|
||||||
|
struct address_space *mapping;
|
||||||
|
pgoff_t index;
|
||||||
|
unsigned long num_pages;
|
||||||
|
int cs_bits = OCFS2_SB(inode->i_sb)->s_clustersize_bits;
|
||||||
|
|
||||||
|
if (!file)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mapping = file->f_mapping;
|
||||||
|
num_pages = (len << cs_bits) >> PAGE_CACHE_SHIFT;
|
||||||
|
if (!num_pages)
|
||||||
|
num_pages = 1;
|
||||||
|
|
||||||
|
index = ((loff_t)start << cs_bits) >> PAGE_CACHE_SHIFT;
|
||||||
|
page_cache_sync_readahead(mapping, &file->f_ra, file,
|
||||||
|
index, num_pages);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Starting at cpos, try to CoW write_len clusters. Don't CoW
|
* Starting at cpos, try to CoW write_len clusters. Don't CoW
|
||||||
* past max_cpos. This will stop when it runs into a hole or an
|
* past max_cpos. This will stop when it runs into a hole or an
|
||||||
|
@ -3433,6 +3455,8 @@ static int ocfs2_refcount_cow_hunk(struct inode *inode,
|
||||||
|
|
||||||
BUG_ON(cow_len == 0);
|
BUG_ON(cow_len == 0);
|
||||||
|
|
||||||
|
ocfs2_readahead_for_cow(inode, file, cow_start, cow_len);
|
||||||
|
|
||||||
context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
|
context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
|
||||||
if (!context) {
|
if (!context) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
|
Reference in a new issue