diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/send.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 112eb647b5cd..646369179697 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c | |||
@@ -124,6 +124,8 @@ struct send_ctx { | |||
124 | struct list_head name_cache_list; | 124 | struct list_head name_cache_list; |
125 | int name_cache_size; | 125 | int name_cache_size; |
126 | 126 | ||
127 | struct file_ra_state ra; | ||
128 | |||
127 | char *read_buf; | 129 | char *read_buf; |
128 | 130 | ||
129 | /* | 131 | /* |
@@ -4170,6 +4172,13 @@ static ssize_t fill_read_buf(struct send_ctx *sctx, u64 offset, u32 len) | |||
4170 | goto out; | 4172 | goto out; |
4171 | 4173 | ||
4172 | last_index = (offset + len - 1) >> PAGE_CACHE_SHIFT; | 4174 | last_index = (offset + len - 1) >> PAGE_CACHE_SHIFT; |
4175 | |||
4176 | /* initial readahead */ | ||
4177 | memset(&sctx->ra, 0, sizeof(struct file_ra_state)); | ||
4178 | file_ra_state_init(&sctx->ra, inode->i_mapping); | ||
4179 | btrfs_force_ra(inode->i_mapping, &sctx->ra, NULL, index, | ||
4180 | last_index - index + 1); | ||
4181 | |||
4173 | while (index <= last_index) { | 4182 | while (index <= last_index) { |
4174 | unsigned cur_len = min_t(unsigned, len, | 4183 | unsigned cur_len = min_t(unsigned, len, |
4175 | PAGE_CACHE_SIZE - pg_offset); | 4184 | PAGE_CACHE_SIZE - pg_offset); |