1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/kernel.h>
17#include <linux/export.h>
18#include <linux/mm.h>
19#include <linux/kdev_t.h>
20#include <linux/gfp.h>
21#include <linux/bio.h>
22#include <linux/fs.h>
23#include <linux/buffer_head.h>
24#include <linux/blkdev.h>
25#include <linux/highmem.h>
26#include <linux/prefetch.h>
27#include <linux/mpage.h>
28#include <linux/mm_inline.h>
29#include <linux/writeback.h>
30#include <linux/backing-dev.h>
31#include <linux/pagevec.h>
32#include <linux/cleancache.h>
33#include "internal.h"
34
35
36
37
38
39
40
41
42
43
44
45
46
47static void mpage_end_io(struct bio *bio)
48{
49 struct bio_vec *bv;
50 int i;
51
52 bio_for_each_segment_all(bv, bio, i) {
53 struct page *page = bv->bv_page;
54 page_endio(page, op_is_write(bio_op(bio)),
55 blk_status_to_errno(bio->bi_status));
56 }
57
58 bio_put(bio);
59}
60
61static struct bio *mpage_bio_submit(int op, int op_flags, struct bio *bio)
62{
63 bio->bi_end_io = mpage_end_io;
64 bio_set_op_attrs(bio, op, op_flags);
65 guard_bio_eod(op, bio);
66 submit_bio(bio);
67 return NULL;
68}
69
70static struct bio *
71mpage_alloc(struct block_device *bdev,
72 sector_t first_sector, int nr_vecs,
73 gfp_t gfp_flags)
74{
75 struct bio *bio;
76
77
78 gfp_flags &= GFP_KERNEL;
79 bio = bio_alloc(gfp_flags, nr_vecs);
80
81 if (bio == NULL && (current->flags & PF_MEMALLOC)) {
82 while (!bio && (nr_vecs /= 2))
83 bio = bio_alloc(gfp_flags, nr_vecs);
84 }
85
86 if (bio) {
87 bio_set_dev(bio, bdev);
88 bio->bi_iter.bi_sector = first_sector;
89 }
90 return bio;
91}
92
93
94
95
96
97
98
99
100
101
102
103static void
104map_buffer_to_page(struct page *page, struct buffer_head *bh, int page_block)
105{
106 struct inode *inode = page->mapping->host;
107 struct buffer_head *page_bh, *head;
108 int block = 0;
109
110 if (!page_has_buffers(page)) {
111
112
113
114
115 if (inode->i_blkbits == PAGE_SHIFT &&
116 buffer_uptodate(bh)) {
117 SetPageUptodate(page);
118 return;
119 }
120 create_empty_buffers(page, i_blocksize(inode), 0);
121 }
122 head = page_buffers(page);
123 page_bh = head;
124 do {
125 if (block == page_block) {
126 page_bh->b_state = bh->b_state;
127 page_bh->b_bdev = bh->b_bdev;
128 page_bh->b_blocknr = bh->b_blocknr;
129 break;
130 }
131 page_bh = page_bh->b_this_page;
132 block++;
133 } while (page_bh != head);
134}
135
136
137
138
139
140
141
142
143
144
145static struct bio *
146do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages,
147 sector_t *last_block_in_bio, struct buffer_head *map_bh,
148 unsigned long *first_logical_block, get_block_t get_block,
149 gfp_t gfp)
150{
151 struct inode *inode = page->mapping->host;
152 const unsigned blkbits = inode->i_blkbits;
153 const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
154 const unsigned blocksize = 1 << blkbits;
155 sector_t block_in_file;
156 sector_t last_block;
157 sector_t last_block_in_file;
158 sector_t blocks[MAX_BUF_PER_PAGE];
159 unsigned page_block;
160 unsigned first_hole = blocks_per_page;
161 struct block_device *bdev = NULL;
162 int length;
163 int fully_mapped = 1;
164 unsigned nblocks;
165 unsigned relative_block;
166
167 if (page_has_buffers(page))
168 goto confused;
169
170 block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
171 last_block = block_in_file + nr_pages * blocks_per_page;
172 last_block_in_file = (i_size_read(inode) + blocksize - 1) >> blkbits;
173 if (last_block > last_block_in_file)
174 last_block = last_block_in_file;
175 page_block = 0;
176
177
178
179
180 nblocks = map_bh->b_size >> blkbits;
181 if (buffer_mapped(map_bh) && block_in_file > *first_logical_block &&
182 block_in_file < (*first_logical_block + nblocks)) {
183 unsigned map_offset = block_in_file - *first_logical_block;
184 unsigned last = nblocks - map_offset;
185
186 for (relative_block = 0; ; relative_block++) {
187 if (relative_block == last) {
188 clear_buffer_mapped(map_bh);
189 break;
190 }
191 if (page_block == blocks_per_page)
192 break;
193 blocks[page_block] = map_bh->b_blocknr + map_offset +
194 relative_block;
195 page_block++;
196 block_in_file++;
197 }
198 bdev = map_bh->b_bdev;
199 }
200
201
202
203
204 map_bh->b_page = page;
205 while (page_block < blocks_per_page) {
206 map_bh->b_state = 0;
207 map_bh->b_size = 0;
208
209 if (block_in_file < last_block) {
210 map_bh->b_size = (last_block-block_in_file) << blkbits;
211 if (get_block(inode, block_in_file, map_bh, 0))
212 goto confused;
213 *first_logical_block = block_in_file;
214 }
215
216 if (!buffer_mapped(map_bh)) {
217 fully_mapped = 0;
218 if (first_hole == blocks_per_page)
219 first_hole = page_block;
220 page_block++;
221 block_in_file++;
222 continue;
223 }
224
225
226
227
228
229
230
231 if (buffer_uptodate(map_bh)) {
232 map_buffer_to_page(page, map_bh, page_block);
233 goto confused;
234 }
235
236 if (first_hole != blocks_per_page)
237 goto confused;
238
239
240 if (page_block && blocks[page_block-1] != map_bh->b_blocknr-1)
241 goto confused;
242 nblocks = map_bh->b_size >> blkbits;
243 for (relative_block = 0; ; relative_block++) {
244 if (relative_block == nblocks) {
245 clear_buffer_mapped(map_bh);
246 break;
247 } else if (page_block == blocks_per_page)
248 break;
249 blocks[page_block] = map_bh->b_blocknr+relative_block;
250 page_block++;
251 block_in_file++;
252 }
253 bdev = map_bh->b_bdev;
254 }
255
256 if (first_hole != blocks_per_page) {
257 zero_user_segment(page, first_hole << blkbits, PAGE_SIZE);
258 if (first_hole == 0) {
259 SetPageUptodate(page);
260 unlock_page(page);
261 goto out;
262 }
263 } else if (fully_mapped) {
264 SetPageMappedToDisk(page);
265 }
266
267 if (fully_mapped && blocks_per_page == 1 && !PageUptodate(page) &&
268 cleancache_get_page(page) == 0) {
269 SetPageUptodate(page);
270 goto confused;
271 }
272
273
274
275
276 if (bio && (*last_block_in_bio != blocks[0] - 1))
277 bio = mpage_bio_submit(REQ_OP_READ, 0, bio);
278
279alloc_new:
280 if (bio == NULL) {
281 if (first_hole == blocks_per_page) {
282 if (!bdev_read_page(bdev, blocks[0] << (blkbits - 9),
283 page))
284 goto out;
285 }
286 bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
287 min_t(int, nr_pages, BIO_MAX_PAGES), gfp);
288 if (bio == NULL)
289 goto confused;
290 }
291
292 length = first_hole << blkbits;
293 if (bio_add_page(bio, page, length, 0) < length) {
294 bio = mpage_bio_submit(REQ_OP_READ, 0, bio);
295 goto alloc_new;
296 }
297
298 relative_block = block_in_file - *first_logical_block;
299 nblocks = map_bh->b_size >> blkbits;
300 if ((buffer_boundary(map_bh) && relative_block == nblocks) ||
301 (first_hole != blocks_per_page))
302 bio = mpage_bio_submit(REQ_OP_READ, 0, bio);
303 else
304 *last_block_in_bio = blocks[blocks_per_page - 1];
305out:
306 return bio;
307
308confused:
309 if (bio)
310 bio = mpage_bio_submit(REQ_OP_READ, 0, bio);
311 if (!PageUptodate(page))
312 block_read_full_page(page, get_block);
313 else
314 unlock_page(page);
315 goto out;
316}
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362int
363mpage_readpages(struct address_space *mapping, struct list_head *pages,
364 unsigned nr_pages, get_block_t get_block)
365{
366 struct bio *bio = NULL;
367 unsigned page_idx;
368 sector_t last_block_in_bio = 0;
369 struct buffer_head map_bh;
370 unsigned long first_logical_block = 0;
371 gfp_t gfp = readahead_gfp_mask(mapping);
372
373 map_bh.b_state = 0;
374 map_bh.b_size = 0;
375 for (page_idx = 0; page_idx < nr_pages; page_idx++) {
376 struct page *page = lru_to_page(pages);
377
378 prefetchw(&page->flags);
379 list_del(&page->lru);
380 if (!add_to_page_cache_lru(page, mapping,
381 page->index,
382 gfp)) {
383 bio = do_mpage_readpage(bio, page,
384 nr_pages - page_idx,
385 &last_block_in_bio, &map_bh,
386 &first_logical_block,
387 get_block, gfp);
388 }
389 put_page(page);
390 }
391 BUG_ON(!list_empty(pages));
392 if (bio)
393 mpage_bio_submit(REQ_OP_READ, 0, bio);
394 return 0;
395}
396EXPORT_SYMBOL(mpage_readpages);
397
398
399
400
401int mpage_readpage(struct page *page, get_block_t get_block)
402{
403 struct bio *bio = NULL;
404 sector_t last_block_in_bio = 0;
405 struct buffer_head map_bh;
406 unsigned long first_logical_block = 0;
407 gfp_t gfp = mapping_gfp_constraint(page->mapping, GFP_KERNEL);
408
409 map_bh.b_state = 0;
410 map_bh.b_size = 0;
411 bio = do_mpage_readpage(bio, page, 1, &last_block_in_bio,
412 &map_bh, &first_logical_block, get_block, gfp);
413 if (bio)
414 mpage_bio_submit(REQ_OP_READ, 0, bio);
415 return 0;
416}
417EXPORT_SYMBOL(mpage_readpage);
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436struct mpage_data {
437 struct bio *bio;
438 sector_t last_block_in_bio;
439 get_block_t *get_block;
440 unsigned use_writepage;
441};
442
443
444
445
446
447static void clean_buffers(struct page *page, unsigned first_unmapped)
448{
449 unsigned buffer_counter = 0;
450 struct buffer_head *bh, *head;
451 if (!page_has_buffers(page))
452 return;
453 head = page_buffers(page);
454 bh = head;
455
456 do {
457 if (buffer_counter++ == first_unmapped)
458 break;
459 clear_buffer_dirty(bh);
460 bh = bh->b_this_page;
461 } while (bh != head);
462
463
464
465
466
467
468 if (buffer_heads_over_limit && PageUptodate(page))
469 try_to_free_buffers(page);
470}
471
472
473
474
475
476
477void clean_page_buffers(struct page *page)
478{
479 clean_buffers(page, ~0U);
480}
481
482static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
483 void *data)
484{
485 struct mpage_data *mpd = data;
486 struct bio *bio = mpd->bio;
487 struct address_space *mapping = page->mapping;
488 struct inode *inode = page->mapping->host;
489 const unsigned blkbits = inode->i_blkbits;
490 unsigned long end_index;
491 const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
492 sector_t last_block;
493 sector_t block_in_file;
494 sector_t blocks[MAX_BUF_PER_PAGE];
495 unsigned page_block;
496 unsigned first_unmapped = blocks_per_page;
497 struct block_device *bdev = NULL;
498 int boundary = 0;
499 sector_t boundary_block = 0;
500 struct block_device *boundary_bdev = NULL;
501 int length;
502 struct buffer_head map_bh;
503 loff_t i_size = i_size_read(inode);
504 int ret = 0;
505 int op_flags = wbc_to_write_flags(wbc);
506
507 if (page_has_buffers(page)) {
508 struct buffer_head *head = page_buffers(page);
509 struct buffer_head *bh = head;
510
511
512 page_block = 0;
513 do {
514 BUG_ON(buffer_locked(bh));
515 if (!buffer_mapped(bh)) {
516
517
518
519
520 if (buffer_dirty(bh))
521 goto confused;
522 if (first_unmapped == blocks_per_page)
523 first_unmapped = page_block;
524 continue;
525 }
526
527 if (first_unmapped != blocks_per_page)
528 goto confused;
529
530 if (!buffer_dirty(bh) || !buffer_uptodate(bh))
531 goto confused;
532 if (page_block) {
533 if (bh->b_blocknr != blocks[page_block-1] + 1)
534 goto confused;
535 }
536 blocks[page_block++] = bh->b_blocknr;
537 boundary = buffer_boundary(bh);
538 if (boundary) {
539 boundary_block = bh->b_blocknr;
540 boundary_bdev = bh->b_bdev;
541 }
542 bdev = bh->b_bdev;
543 } while ((bh = bh->b_this_page) != head);
544
545 if (first_unmapped)
546 goto page_is_mapped;
547
548
549
550
551
552
553
554 goto confused;
555 }
556
557
558
559
560 BUG_ON(!PageUptodate(page));
561 block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
562 last_block = (i_size - 1) >> blkbits;
563 map_bh.b_page = page;
564 for (page_block = 0; page_block < blocks_per_page; ) {
565
566 map_bh.b_state = 0;
567 map_bh.b_size = 1 << blkbits;
568 if (mpd->get_block(inode, block_in_file, &map_bh, 1))
569 goto confused;
570 if (buffer_new(&map_bh))
571 clean_bdev_bh_alias(&map_bh);
572 if (buffer_boundary(&map_bh)) {
573 boundary_block = map_bh.b_blocknr;
574 boundary_bdev = map_bh.b_bdev;
575 }
576 if (page_block) {
577 if (map_bh.b_blocknr != blocks[page_block-1] + 1)
578 goto confused;
579 }
580 blocks[page_block++] = map_bh.b_blocknr;
581 boundary = buffer_boundary(&map_bh);
582 bdev = map_bh.b_bdev;
583 if (block_in_file == last_block)
584 break;
585 block_in_file++;
586 }
587 BUG_ON(page_block == 0);
588
589 first_unmapped = page_block;
590
591page_is_mapped:
592 end_index = i_size >> PAGE_SHIFT;
593 if (page->index >= end_index) {
594
595
596
597
598
599
600
601
602 unsigned offset = i_size & (PAGE_SIZE - 1);
603
604 if (page->index > end_index || !offset)
605 goto confused;
606 zero_user_segment(page, offset, PAGE_SIZE);
607 }
608
609
610
611
612 if (bio && mpd->last_block_in_bio != blocks[0] - 1)
613 bio = mpage_bio_submit(REQ_OP_WRITE, op_flags, bio);
614
615alloc_new:
616 if (bio == NULL) {
617 if (first_unmapped == blocks_per_page) {
618 if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
619 page, wbc))
620 goto out;
621 }
622 bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
623 BIO_MAX_PAGES, GFP_NOFS|__GFP_HIGH);
624 if (bio == NULL)
625 goto confused;
626
627 wbc_init_bio(wbc, bio);
628 bio->bi_write_hint = inode->i_write_hint;
629 }
630
631
632
633
634
635
636 wbc_account_io(wbc, page, PAGE_SIZE);
637 length = first_unmapped << blkbits;
638 if (bio_add_page(bio, page, length, 0) < length) {
639 bio = mpage_bio_submit(REQ_OP_WRITE, op_flags, bio);
640 goto alloc_new;
641 }
642
643 clean_buffers(page, first_unmapped);
644
645 BUG_ON(PageWriteback(page));
646 set_page_writeback(page);
647 unlock_page(page);
648 if (boundary || (first_unmapped != blocks_per_page)) {
649 bio = mpage_bio_submit(REQ_OP_WRITE, op_flags, bio);
650 if (boundary_block) {
651 write_boundary_block(boundary_bdev,
652 boundary_block, 1 << blkbits);
653 }
654 } else {
655 mpd->last_block_in_bio = blocks[blocks_per_page - 1];
656 }
657 goto out;
658
659confused:
660 if (bio)
661 bio = mpage_bio_submit(REQ_OP_WRITE, op_flags, bio);
662
663 if (mpd->use_writepage) {
664 ret = mapping->a_ops->writepage(page, wbc);
665 } else {
666 ret = -EAGAIN;
667 goto out;
668 }
669
670
671
672 mapping_set_error(mapping, ret);
673out:
674 mpd->bio = bio;
675 return ret;
676}
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697int
698mpage_writepages(struct address_space *mapping,
699 struct writeback_control *wbc, get_block_t get_block)
700{
701 struct blk_plug plug;
702 int ret;
703
704 blk_start_plug(&plug);
705
706 if (!get_block)
707 ret = generic_writepages(mapping, wbc);
708 else {
709 struct mpage_data mpd = {
710 .bio = NULL,
711 .last_block_in_bio = 0,
712 .get_block = get_block,
713 .use_writepage = 1,
714 };
715
716 ret = write_cache_pages(mapping, wbc, __mpage_writepage, &mpd);
717 if (mpd.bio) {
718 int op_flags = (wbc->sync_mode == WB_SYNC_ALL ?
719 REQ_SYNC : 0);
720 mpage_bio_submit(REQ_OP_WRITE, op_flags, mpd.bio);
721 }
722 }
723 blk_finish_plug(&plug);
724 return ret;
725}
726EXPORT_SYMBOL(mpage_writepages);
727
728int mpage_writepage(struct page *page, get_block_t get_block,
729 struct writeback_control *wbc)
730{
731 struct mpage_data mpd = {
732 .bio = NULL,
733 .last_block_in_bio = 0,
734 .get_block = get_block,
735 .use_writepage = 0,
736 };
737 int ret = __mpage_writepage(page, wbc, &mpd);
738 if (mpd.bio) {
739 int op_flags = (wbc->sync_mode == WB_SYNC_ALL ?
740 REQ_SYNC : 0);
741 mpage_bio_submit(REQ_OP_WRITE, op_flags, mpd.bio);
742 }
743 return ret;
744}
745EXPORT_SYMBOL(mpage_writepage);
746