1
2
3
4
5
6
7
8
9
10#include <linux/kernel.h>
11#include <linux/dax.h>
12#include <linux/gfp.h>
13#include <linux/export.h>
14#include <linux/blkdev.h>
15#include <linux/backing-dev.h>
16#include <linux/task_io_accounting_ops.h>
17#include <linux/pagevec.h>
18#include <linux/pagemap.h>
19#include <linux/syscalls.h>
20#include <linux/file.h>
21#include <linux/mm_inline.h>
22
23#include "internal.h"
24
25
26
27
28
29void
30file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping)
31{
32 ra->ra_pages = inode_to_bdi(mapping->host)->ra_pages;
33 ra->prev_pos = -1;
34}
35EXPORT_SYMBOL_GPL(file_ra_state_init);
36
37
38
39
40
41
42
43
44static void read_cache_pages_invalidate_page(struct address_space *mapping,
45 struct page *page)
46{
47 if (page_has_private(page)) {
48 if (!trylock_page(page))
49 BUG();
50 page->mapping = mapping;
51 do_invalidatepage(page, 0, PAGE_SIZE);
52 page->mapping = NULL;
53 unlock_page(page);
54 }
55 put_page(page);
56}
57
58
59
60
61static void read_cache_pages_invalidate_pages(struct address_space *mapping,
62 struct list_head *pages)
63{
64 struct page *victim;
65
66 while (!list_empty(pages)) {
67 victim = lru_to_page(pages);
68 list_del(&victim->lru);
69 read_cache_pages_invalidate_page(mapping, victim);
70 }
71}
72
73
74
75
76
77
78
79
80
81
82
83int read_cache_pages(struct address_space *mapping, struct list_head *pages,
84 int (*filler)(void *, struct page *), void *data)
85{
86 struct page *page;
87 int ret = 0;
88
89 while (!list_empty(pages)) {
90 page = lru_to_page(pages);
91 list_del(&page->lru);
92 if (add_to_page_cache_lru(page, mapping, page->index,
93 readahead_gfp_mask(mapping))) {
94 read_cache_pages_invalidate_page(mapping, page);
95 continue;
96 }
97 put_page(page);
98
99 ret = filler(data, page);
100 if (unlikely(ret)) {
101 read_cache_pages_invalidate_pages(mapping, pages);
102 break;
103 }
104 task_io_account_read(PAGE_SIZE);
105 }
106 return ret;
107}
108
109EXPORT_SYMBOL(read_cache_pages);
110
111static int read_pages(struct address_space *mapping, struct file *filp,
112 struct list_head *pages, unsigned int nr_pages, gfp_t gfp)
113{
114 struct blk_plug plug;
115 unsigned page_idx;
116 int ret;
117
118 blk_start_plug(&plug);
119
120 if (mapping->a_ops->readpages) {
121 ret = mapping->a_ops->readpages(filp, mapping, pages, nr_pages);
122
123 put_pages_list(pages);
124 goto out;
125 }
126
127 for (page_idx = 0; page_idx < nr_pages; page_idx++) {
128 struct page *page = lru_to_page(pages);
129 list_del(&page->lru);
130 if (!add_to_page_cache_lru(page, mapping, page->index, gfp))
131 mapping->a_ops->readpage(filp, page);
132 put_page(page);
133 }
134 ret = 0;
135
136out:
137 blk_finish_plug(&plug);
138
139 return ret;
140}
141
142
143
144
145
146
147
148
149
150int __do_page_cache_readahead(struct address_space *mapping, struct file *filp,
151 pgoff_t offset, unsigned long nr_to_read,
152 unsigned long lookahead_size)
153{
154 struct inode *inode = mapping->host;
155 struct page *page;
156 unsigned long end_index;
157 LIST_HEAD(page_pool);
158 int page_idx;
159 int ret = 0;
160 loff_t isize = i_size_read(inode);
161 gfp_t gfp_mask = readahead_gfp_mask(mapping);
162
163 if (isize == 0)
164 goto out;
165
166 end_index = ((isize - 1) >> PAGE_SHIFT);
167
168
169
170
171 for (page_idx = 0; page_idx < nr_to_read; page_idx++) {
172 pgoff_t page_offset = offset + page_idx;
173
174 if (page_offset > end_index)
175 break;
176
177 rcu_read_lock();
178 page = radix_tree_lookup(&mapping->page_tree, page_offset);
179 rcu_read_unlock();
180 if (page && !radix_tree_exceptional_entry(page))
181 continue;
182
183 page = __page_cache_alloc(gfp_mask);
184 if (!page)
185 break;
186 page->index = page_offset;
187 list_add(&page->lru, &page_pool);
188 if (page_idx == nr_to_read - lookahead_size)
189 SetPageReadahead(page);
190 ret++;
191 }
192
193
194
195
196
197
198 if (ret)
199 read_pages(mapping, filp, &page_pool, ret, gfp_mask);
200 BUG_ON(!list_empty(&page_pool));
201out:
202 return ret;
203}
204
205
206
207
208
209int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
210 pgoff_t offset, unsigned long nr_to_read)
211{
212 if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages))
213 return -EINVAL;
214
215 nr_to_read = min(nr_to_read, inode_to_bdi(mapping->host)->ra_pages);
216 while (nr_to_read) {
217 int err;
218
219 unsigned long this_chunk = (2 * 1024 * 1024) / PAGE_SIZE;
220
221 if (this_chunk > nr_to_read)
222 this_chunk = nr_to_read;
223 err = __do_page_cache_readahead(mapping, filp,
224 offset, this_chunk, 0);
225 if (err < 0)
226 return err;
227
228 offset += this_chunk;
229 nr_to_read -= this_chunk;
230 }
231 return 0;
232}
233
234
235
236
237
238
239
240static unsigned long get_init_ra_size(unsigned long size, unsigned long max)
241{
242 unsigned long newsize = roundup_pow_of_two(size);
243
244 if (newsize <= max / 32)
245 newsize = newsize * 4;
246 else if (newsize <= max / 4)
247 newsize = newsize * 2;
248 else
249 newsize = max;
250
251 return newsize;
252}
253
254
255
256
257
258static unsigned long get_next_ra_size(struct file_ra_state *ra,
259 unsigned long max)
260{
261 unsigned long cur = ra->size;
262 unsigned long newsize;
263
264 if (cur < max / 16)
265 newsize = 4 * cur;
266 else
267 newsize = 2 * cur;
268
269 return min(newsize, max);
270}
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317static pgoff_t count_history_pages(struct address_space *mapping,
318 pgoff_t offset, unsigned long max)
319{
320 pgoff_t head;
321
322 rcu_read_lock();
323 head = page_cache_prev_hole(mapping, offset - 1, max);
324 rcu_read_unlock();
325
326 return offset - 1 - head;
327}
328
329
330
331
332static int try_context_readahead(struct address_space *mapping,
333 struct file_ra_state *ra,
334 pgoff_t offset,
335 unsigned long req_size,
336 unsigned long max)
337{
338 pgoff_t size;
339
340 size = count_history_pages(mapping, offset, max);
341
342
343
344
345
346 if (size <= req_size)
347 return 0;
348
349
350
351
352
353 if (size >= offset)
354 size *= 2;
355
356 ra->start = offset;
357 ra->size = min(size + req_size, max);
358 ra->async_size = 1;
359
360 return 1;
361}
362
363
364
365
366static unsigned long
367ondemand_readahead(struct address_space *mapping,
368 struct file_ra_state *ra, struct file *filp,
369 bool hit_readahead_marker, pgoff_t offset,
370 unsigned long req_size)
371{
372 unsigned long max = ra->ra_pages;
373 pgoff_t prev_offset;
374
375
376
377
378 if (!offset)
379 goto initial_readahead;
380
381
382
383
384
385 if ((offset == (ra->start + ra->size - ra->async_size) ||
386 offset == (ra->start + ra->size))) {
387 ra->start += ra->size;
388 ra->size = get_next_ra_size(ra, max);
389 ra->async_size = ra->size;
390 goto readit;
391 }
392
393
394
395
396
397
398
399 if (hit_readahead_marker) {
400 pgoff_t start;
401
402 rcu_read_lock();
403 start = page_cache_next_hole(mapping, offset + 1, max);
404 rcu_read_unlock();
405
406 if (!start || start - offset > max)
407 return 0;
408
409 ra->start = start;
410 ra->size = start - offset;
411 ra->size += req_size;
412 ra->size = get_next_ra_size(ra, max);
413 ra->async_size = ra->size;
414 goto readit;
415 }
416
417
418
419
420 if (req_size > max)
421 goto initial_readahead;
422
423
424
425
426
427
428 prev_offset = (unsigned long long)ra->prev_pos >> PAGE_SHIFT;
429 if (offset - prev_offset <= 1UL)
430 goto initial_readahead;
431
432
433
434
435
436 if (try_context_readahead(mapping, ra, offset, req_size, max))
437 goto readit;
438
439
440
441
442
443 return __do_page_cache_readahead(mapping, filp, offset, req_size, 0);
444
445initial_readahead:
446 ra->start = offset;
447 ra->size = get_init_ra_size(req_size, max);
448 ra->async_size = ra->size > req_size ? ra->size - req_size : ra->size;
449
450readit:
451
452
453
454
455
456 if (offset == ra->start && ra->size == ra->async_size) {
457 ra->async_size = get_next_ra_size(ra, max);
458 ra->size += ra->async_size;
459 }
460
461 return ra_submit(ra, mapping, filp);
462}
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478void page_cache_sync_readahead(struct address_space *mapping,
479 struct file_ra_state *ra, struct file *filp,
480 pgoff_t offset, unsigned long req_size)
481{
482
483 if (!ra->ra_pages)
484 return;
485
486
487 if (filp && (filp->f_mode & FMODE_RANDOM)) {
488 force_page_cache_readahead(mapping, filp, offset, req_size);
489 return;
490 }
491
492
493 ondemand_readahead(mapping, ra, filp, false, offset, req_size);
494}
495EXPORT_SYMBOL_GPL(page_cache_sync_readahead);
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512void
513page_cache_async_readahead(struct address_space *mapping,
514 struct file_ra_state *ra, struct file *filp,
515 struct page *page, pgoff_t offset,
516 unsigned long req_size)
517{
518
519 if (!ra->ra_pages)
520 return;
521
522
523
524
525 if (PageWriteback(page))
526 return;
527
528 ClearPageReadahead(page);
529
530
531
532
533 if (inode_read_congested(mapping->host))
534 return;
535
536
537 ondemand_readahead(mapping, ra, filp, true, offset, req_size);
538}
539EXPORT_SYMBOL_GPL(page_cache_async_readahead);
540
541static ssize_t
542do_readahead(struct address_space *mapping, struct file *filp,
543 pgoff_t index, unsigned long nr)
544{
545 if (!mapping || !mapping->a_ops)
546 return -EINVAL;
547
548
549
550
551
552
553 if (dax_mapping(mapping))
554 return 0;
555
556 return force_page_cache_readahead(mapping, filp, index, nr);
557}
558
559SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count)
560{
561 ssize_t ret;
562 struct fd f;
563
564 ret = -EBADF;
565 f = fdget(fd);
566 if (f.file) {
567 if (f.file->f_mode & FMODE_READ) {
568 struct address_space *mapping = f.file->f_mapping;
569 pgoff_t start = offset >> PAGE_SHIFT;
570 pgoff_t end = (offset + count - 1) >> PAGE_SHIFT;
571 unsigned long len = end - start + 1;
572 ret = do_readahead(mapping, f.file, start, len);
573 }
574 fdput(f);
575 }
576 return ret;
577}
578