1
2
3
4
5
6
7
8
9
10
11
12#include <linux/module.h>
13#include <linux/compiler.h>
14#include <linux/fs.h>
15#include <linux/uaccess.h>
16#include <linux/aio.h>
17#include <linux/capability.h>
18#include <linux/kernel_stat.h>
19#include <linux/gfp.h>
20#include <linux/mm.h>
21#include <linux/swap.h>
22#include <linux/mman.h>
23#include <linux/pagemap.h>
24#include <linux/file.h>
25#include <linux/uio.h>
26#include <linux/hash.h>
27#include <linux/writeback.h>
28#include <linux/backing-dev.h>
29#include <linux/pagevec.h>
30#include <linux/blkdev.h>
31#include <linux/security.h>
32#include <linux/syscalls.h>
33#include <linux/cpuset.h>
34#include <linux/hardirq.h>
35#include <linux/memcontrol.h>
36#include <linux/mm_inline.h>
37#include "internal.h"
38
39
40
41
42#include <linux/buffer_head.h>
43
44#include <asm/mman.h>
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118void __remove_from_page_cache(struct page *page)
119{
120 struct address_space *mapping = page->mapping;
121
122 radix_tree_delete(&mapping->page_tree, page->index);
123 page->mapping = NULL;
124 mapping->nrpages--;
125 __dec_zone_page_state(page, NR_FILE_PAGES);
126 if (PageSwapBacked(page))
127 __dec_zone_page_state(page, NR_SHMEM);
128 BUG_ON(page_mapped(page));
129
130
131
132
133
134
135
136
137 if (PageDirty(page) && mapping_cap_account_dirty(mapping)) {
138 dec_zone_page_state(page, NR_FILE_DIRTY);
139 dec_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE);
140 }
141}
142
143void remove_from_page_cache(struct page *page)
144{
145 struct address_space *mapping = page->mapping;
146 void (*freepage)(struct page *);
147
148 BUG_ON(!PageLocked(page));
149
150 freepage = mapping->a_ops->freepage;
151 spin_lock_irq(&mapping->tree_lock);
152 __remove_from_page_cache(page);
153 spin_unlock_irq(&mapping->tree_lock);
154 mem_cgroup_uncharge_cache_page(page);
155
156 if (freepage)
157 freepage(page);
158}
159EXPORT_SYMBOL(remove_from_page_cache);
160
161static int sync_page(void *word)
162{
163 struct address_space *mapping;
164 struct page *page;
165
166 page = container_of((unsigned long *)word, struct page, flags);
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 smp_mb();
190 mapping = page_mapping(page);
191 if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
192 mapping->a_ops->sync_page(page);
193 io_schedule();
194 return 0;
195}
196
197static int sync_page_killable(void *word)
198{
199 sync_page(word);
200 return fatal_signal_pending(current) ? -EINTR : 0;
201}
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
219 loff_t end, int sync_mode)
220{
221 int ret;
222 struct writeback_control wbc = {
223 .sync_mode = sync_mode,
224 .nr_to_write = LONG_MAX,
225 .range_start = start,
226 .range_end = end,
227 };
228
229 if (!mapping_cap_writeback_dirty(mapping))
230 return 0;
231
232 ret = do_writepages(mapping, &wbc);
233 return ret;
234}
235
236static inline int __filemap_fdatawrite(struct address_space *mapping,
237 int sync_mode)
238{
239 return __filemap_fdatawrite_range(mapping, 0, LLONG_MAX, sync_mode);
240}
241
242int filemap_fdatawrite(struct address_space *mapping)
243{
244 return __filemap_fdatawrite(mapping, WB_SYNC_ALL);
245}
246EXPORT_SYMBOL(filemap_fdatawrite);
247
248int filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
249 loff_t end)
250{
251 return __filemap_fdatawrite_range(mapping, start, end, WB_SYNC_ALL);
252}
253EXPORT_SYMBOL(filemap_fdatawrite_range);
254
255
256
257
258
259
260
261
262int filemap_flush(struct address_space *mapping)
263{
264 return __filemap_fdatawrite(mapping, WB_SYNC_NONE);
265}
266EXPORT_SYMBOL(filemap_flush);
267
268
269
270
271
272
273
274
275
276
277int filemap_fdatawait_range(struct address_space *mapping, loff_t start_byte,
278 loff_t end_byte)
279{
280 pgoff_t index = start_byte >> PAGE_CACHE_SHIFT;
281 pgoff_t end = end_byte >> PAGE_CACHE_SHIFT;
282 struct pagevec pvec;
283 int nr_pages;
284 int ret = 0;
285
286 if (end_byte < start_byte)
287 return 0;
288
289 pagevec_init(&pvec, 0);
290 while ((index <= end) &&
291 (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
292 PAGECACHE_TAG_WRITEBACK,
293 min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) {
294 unsigned i;
295
296 for (i = 0; i < nr_pages; i++) {
297 struct page *page = pvec.pages[i];
298
299
300 if (page->index > end)
301 continue;
302
303 wait_on_page_writeback(page);
304 if (PageError(page))
305 ret = -EIO;
306 }
307 pagevec_release(&pvec);
308 cond_resched();
309 }
310
311
312 if (test_and_clear_bit(AS_ENOSPC, &mapping->flags))
313 ret = -ENOSPC;
314 if (test_and_clear_bit(AS_EIO, &mapping->flags))
315 ret = -EIO;
316
317 return ret;
318}
319EXPORT_SYMBOL(filemap_fdatawait_range);
320
321
322
323
324
325
326
327
328int filemap_fdatawait(struct address_space *mapping)
329{
330 loff_t i_size = i_size_read(mapping->host);
331
332 if (i_size == 0)
333 return 0;
334
335 return filemap_fdatawait_range(mapping, 0, i_size - 1);
336}
337EXPORT_SYMBOL(filemap_fdatawait);
338
339int filemap_write_and_wait(struct address_space *mapping)
340{
341 int err = 0;
342
343 if (mapping->nrpages) {
344 err = filemap_fdatawrite(mapping);
345
346
347
348
349
350
351 if (err != -EIO) {
352 int err2 = filemap_fdatawait(mapping);
353 if (!err)
354 err = err2;
355 }
356 }
357 return err;
358}
359EXPORT_SYMBOL(filemap_write_and_wait);
360
361
362
363
364
365
366
367
368
369
370
371
372int filemap_write_and_wait_range(struct address_space *mapping,
373 loff_t lstart, loff_t lend)
374{
375 int err = 0;
376
377 if (mapping->nrpages) {
378 err = __filemap_fdatawrite_range(mapping, lstart, lend,
379 WB_SYNC_ALL);
380
381 if (err != -EIO) {
382 int err2 = filemap_fdatawait_range(mapping,
383 lstart, lend);
384 if (!err)
385 err = err2;
386 }
387 }
388 return err;
389}
390EXPORT_SYMBOL(filemap_write_and_wait_range);
391
392
393
394
395
396
397
398
399
400
401
402int add_to_page_cache_locked(struct page *page, struct address_space *mapping,
403 pgoff_t offset, gfp_t gfp_mask)
404{
405 int error;
406
407 VM_BUG_ON(!PageLocked(page));
408
409 error = mem_cgroup_cache_charge(page, current->mm,
410 gfp_mask & GFP_RECLAIM_MASK);
411 if (error)
412 goto out;
413
414 error = radix_tree_preload(gfp_mask & ~__GFP_HIGHMEM);
415 if (error == 0) {
416 page_cache_get(page);
417 page->mapping = mapping;
418 page->index = offset;
419
420 spin_lock_irq(&mapping->tree_lock);
421 error = radix_tree_insert(&mapping->page_tree, offset, page);
422 if (likely(!error)) {
423 mapping->nrpages++;
424 __inc_zone_page_state(page, NR_FILE_PAGES);
425 if (PageSwapBacked(page))
426 __inc_zone_page_state(page, NR_SHMEM);
427 spin_unlock_irq(&mapping->tree_lock);
428 } else {
429 page->mapping = NULL;
430 spin_unlock_irq(&mapping->tree_lock);
431 mem_cgroup_uncharge_cache_page(page);
432 page_cache_release(page);
433 }
434 radix_tree_preload_end();
435 } else
436 mem_cgroup_uncharge_cache_page(page);
437out:
438 return error;
439}
440EXPORT_SYMBOL(add_to_page_cache_locked);
441
442int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
443 pgoff_t offset, gfp_t gfp_mask)
444{
445 int ret;
446
447
448
449
450
451
452
453 if (mapping_cap_swap_backed(mapping))
454 SetPageSwapBacked(page);
455
456 ret = add_to_page_cache(page, mapping, offset, gfp_mask);
457 if (ret == 0) {
458 if (page_is_file_cache(page))
459 lru_cache_add_file(page);
460 else
461 lru_cache_add_anon(page);
462 }
463 return ret;
464}
465EXPORT_SYMBOL_GPL(add_to_page_cache_lru);
466
467#ifdef CONFIG_NUMA
468struct page *__page_cache_alloc(gfp_t gfp)
469{
470 int n;
471 struct page *page;
472
473 if (cpuset_do_page_mem_spread()) {
474 get_mems_allowed();
475 n = cpuset_mem_spread_node();
476 page = alloc_pages_exact_node(n, gfp, 0);
477 put_mems_allowed();
478 return page;
479 }
480 return alloc_pages(gfp, 0);
481}
482EXPORT_SYMBOL(__page_cache_alloc);
483#endif
484
485static int __sleep_on_page_lock(void *word)
486{
487 io_schedule();
488 return 0;
489}
490
491
492
493
494
495
496
497
498
499
500
501static wait_queue_head_t *page_waitqueue(struct page *page)
502{
503 const struct zone *zone = page_zone(page);
504
505 return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)];
506}
507
508static inline void wake_up_page(struct page *page, int bit)
509{
510 __wake_up_bit(page_waitqueue(page), &page->flags, bit);
511}
512
513void wait_on_page_bit(struct page *page, int bit_nr)
514{
515 DEFINE_WAIT_BIT(wait, &page->flags, bit_nr);
516
517 if (test_bit(bit_nr, &page->flags))
518 __wait_on_bit(page_waitqueue(page), &wait, sync_page,
519 TASK_UNINTERRUPTIBLE);
520}
521EXPORT_SYMBOL(wait_on_page_bit);
522
523
524
525
526
527
528
529
530void add_page_wait_queue(struct page *page, wait_queue_t *waiter)
531{
532 wait_queue_head_t *q = page_waitqueue(page);
533 unsigned long flags;
534
535 spin_lock_irqsave(&q->lock, flags);
536 __add_wait_queue(q, waiter);
537 spin_unlock_irqrestore(&q->lock, flags);
538}
539EXPORT_SYMBOL_GPL(add_page_wait_queue);
540
541
542
543
544
545
546
547
548
549
550
551
552
553void unlock_page(struct page *page)
554{
555 VM_BUG_ON(!PageLocked(page));
556 clear_bit_unlock(PG_locked, &page->flags);
557 smp_mb__after_clear_bit();
558 wake_up_page(page, PG_locked);
559}
560EXPORT_SYMBOL(unlock_page);
561
562
563
564
565
566void end_page_writeback(struct page *page)
567{
568 if (TestClearPageReclaim(page))
569 rotate_reclaimable_page(page);
570
571 if (!test_clear_page_writeback(page))
572 BUG();
573
574 smp_mb__after_clear_bit();
575 wake_up_page(page, PG_writeback);
576}
577EXPORT_SYMBOL(end_page_writeback);
578
579
580
581
582
583
584
585
586
587
588void __lock_page(struct page *page)
589{
590 DEFINE_WAIT_BIT(wait, &page->flags, PG_locked);
591
592 __wait_on_bit_lock(page_waitqueue(page), &wait, sync_page,
593 TASK_UNINTERRUPTIBLE);
594}
595EXPORT_SYMBOL(__lock_page);
596
597int __lock_page_killable(struct page *page)
598{
599 DEFINE_WAIT_BIT(wait, &page->flags, PG_locked);
600
601 return __wait_on_bit_lock(page_waitqueue(page), &wait,
602 sync_page_killable, TASK_KILLABLE);
603}
604EXPORT_SYMBOL_GPL(__lock_page_killable);
605
606
607
608
609
610
611
612
613void __lock_page_nosync(struct page *page)
614{
615 DEFINE_WAIT_BIT(wait, &page->flags, PG_locked);
616 __wait_on_bit_lock(page_waitqueue(page), &wait, __sleep_on_page_lock,
617 TASK_UNINTERRUPTIBLE);
618}
619
620int __lock_page_or_retry(struct page *page, struct mm_struct *mm,
621 unsigned int flags)
622{
623 if (!(flags & FAULT_FLAG_ALLOW_RETRY)) {
624 __lock_page(page);
625 return 1;
626 } else {
627 up_read(&mm->mmap_sem);
628 wait_on_page_locked(page);
629 return 0;
630 }
631}
632
633
634
635
636
637
638
639
640
641struct page *find_get_page(struct address_space *mapping, pgoff_t offset)
642{
643 void **pagep;
644 struct page *page;
645
646 rcu_read_lock();
647repeat:
648 page = NULL;
649 pagep = radix_tree_lookup_slot(&mapping->page_tree, offset);
650 if (pagep) {
651 page = radix_tree_deref_slot(pagep);
652 if (unlikely(!page))
653 goto out;
654 if (radix_tree_deref_retry(page))
655 goto repeat;
656
657 if (!page_cache_get_speculative(page))
658 goto repeat;
659
660
661
662
663
664
665 if (unlikely(page != *pagep)) {
666 page_cache_release(page);
667 goto repeat;
668 }
669 }
670out:
671 rcu_read_unlock();
672
673 return page;
674}
675EXPORT_SYMBOL(find_get_page);
676
677
678
679
680
681
682
683
684
685
686
687struct page *find_lock_page(struct address_space *mapping, pgoff_t offset)
688{
689 struct page *page;
690
691repeat:
692 page = find_get_page(mapping, offset);
693 if (page) {
694 lock_page(page);
695
696 if (unlikely(page->mapping != mapping)) {
697 unlock_page(page);
698 page_cache_release(page);
699 goto repeat;
700 }
701 VM_BUG_ON(page->index != offset);
702 }
703 return page;
704}
705EXPORT_SYMBOL(find_lock_page);
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724struct page *find_or_create_page(struct address_space *mapping,
725 pgoff_t index, gfp_t gfp_mask)
726{
727 struct page *page;
728 int err;
729repeat:
730 page = find_lock_page(mapping, index);
731 if (!page) {
732 page = __page_cache_alloc(gfp_mask);
733 if (!page)
734 return NULL;
735
736
737
738
739
740
741 err = add_to_page_cache_lru(page, mapping, index,
742 (gfp_mask & GFP_RECLAIM_MASK));
743 if (unlikely(err)) {
744 page_cache_release(page);
745 page = NULL;
746 if (err == -EEXIST)
747 goto repeat;
748 }
749 }
750 return page;
751}
752EXPORT_SYMBOL(find_or_create_page);
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770unsigned find_get_pages(struct address_space *mapping, pgoff_t start,
771 unsigned int nr_pages, struct page **pages)
772{
773 unsigned int i;
774 unsigned int ret;
775 unsigned int nr_found;
776
777 rcu_read_lock();
778restart:
779 nr_found = radix_tree_gang_lookup_slot(&mapping->page_tree,
780 (void ***)pages, start, nr_pages);
781 ret = 0;
782 for (i = 0; i < nr_found; i++) {
783 struct page *page;
784repeat:
785 page = radix_tree_deref_slot((void **)pages[i]);
786 if (unlikely(!page))
787 continue;
788 if (radix_tree_deref_retry(page)) {
789 if (ret)
790 start = pages[ret-1]->index;
791 goto restart;
792 }
793
794 if (!page_cache_get_speculative(page))
795 goto repeat;
796
797
798 if (unlikely(page != *((void **)pages[i]))) {
799 page_cache_release(page);
800 goto repeat;
801 }
802
803 pages[ret] = page;
804 ret++;
805 }
806 rcu_read_unlock();
807 return ret;
808}
809
810
811
812
813
814
815
816
817
818
819
820
821
822unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t index,
823 unsigned int nr_pages, struct page **pages)
824{
825 unsigned int i;
826 unsigned int ret;
827 unsigned int nr_found;
828
829 rcu_read_lock();
830restart:
831 nr_found = radix_tree_gang_lookup_slot(&mapping->page_tree,
832 (void ***)pages, index, nr_pages);
833 ret = 0;
834 for (i = 0; i < nr_found; i++) {
835 struct page *page;
836repeat:
837 page = radix_tree_deref_slot((void **)pages[i]);
838 if (unlikely(!page))
839 continue;
840 if (radix_tree_deref_retry(page))
841 goto restart;
842
843 if (page->mapping == NULL || page->index != index)
844 break;
845
846 if (!page_cache_get_speculative(page))
847 goto repeat;
848
849
850 if (unlikely(page != *((void **)pages[i]))) {
851 page_cache_release(page);
852 goto repeat;
853 }
854
855 pages[ret] = page;
856 ret++;
857 index++;
858 }
859 rcu_read_unlock();
860 return ret;
861}
862EXPORT_SYMBOL(find_get_pages_contig);
863
864
865
866
867
868
869
870
871
872
873
874
875unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index,
876 int tag, unsigned int nr_pages, struct page **pages)
877{
878 unsigned int i;
879 unsigned int ret;
880 unsigned int nr_found;
881
882 rcu_read_lock();
883restart:
884 nr_found = radix_tree_gang_lookup_tag_slot(&mapping->page_tree,
885 (void ***)pages, *index, nr_pages, tag);
886 ret = 0;
887 for (i = 0; i < nr_found; i++) {
888 struct page *page;
889repeat:
890 page = radix_tree_deref_slot((void **)pages[i]);
891 if (unlikely(!page))
892 continue;
893 if (radix_tree_deref_retry(page))
894 goto restart;
895
896 if (!page_cache_get_speculative(page))
897 goto repeat;
898
899
900 if (unlikely(page != *((void **)pages[i]))) {
901 page_cache_release(page);
902 goto repeat;
903 }
904
905 pages[ret] = page;
906 ret++;
907 }
908 rcu_read_unlock();
909
910 if (ret)
911 *index = pages[ret - 1]->index + 1;
912
913 return ret;
914}
915EXPORT_SYMBOL(find_get_pages_tag);
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930struct page *
931grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)
932{
933 struct page *page = find_get_page(mapping, index);
934
935 if (page) {
936 if (trylock_page(page))
937 return page;
938 page_cache_release(page);
939 return NULL;
940 }
941 page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~__GFP_FS);
942 if (page && add_to_page_cache_lru(page, mapping, index, GFP_NOFS)) {
943 page_cache_release(page);
944 page = NULL;
945 }
946 return page;
947}
948EXPORT_SYMBOL(grab_cache_page_nowait);
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965static void shrink_readahead_size_eio(struct file *filp,
966 struct file_ra_state *ra)
967{
968 ra->ra_pages /= 4;
969}
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984static void do_generic_file_read(struct file *filp, loff_t *ppos,
985 read_descriptor_t *desc, read_actor_t actor)
986{
987 struct address_space *mapping = filp->f_mapping;
988 struct inode *inode = mapping->host;
989 struct file_ra_state *ra = &filp->f_ra;
990 pgoff_t index;
991 pgoff_t last_index;
992 pgoff_t prev_index;
993 unsigned long offset;
994 unsigned int prev_offset;
995 int error;
996
997 index = *ppos >> PAGE_CACHE_SHIFT;
998 prev_index = ra->prev_pos >> PAGE_CACHE_SHIFT;
999 prev_offset = ra->prev_pos & (PAGE_CACHE_SIZE-1);
1000 last_index = (*ppos + desc->count + PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT;
1001 offset = *ppos & ~PAGE_CACHE_MASK;
1002
1003 for (;;) {
1004 struct page *page;
1005 pgoff_t end_index;
1006 loff_t isize;
1007 unsigned long nr, ret;
1008
1009 cond_resched();
1010find_page:
1011 page = find_get_page(mapping, index);
1012 if (!page) {
1013 page_cache_sync_readahead(mapping,
1014 ra, filp,
1015 index, last_index - index);
1016 page = find_get_page(mapping, index);
1017 if (unlikely(page == NULL))
1018 goto no_cached_page;
1019 }
1020 if (PageReadahead(page)) {
1021 page_cache_async_readahead(mapping,
1022 ra, filp, page,
1023 index, last_index - index);
1024 }
1025 if (!PageUptodate(page)) {
1026 if (inode->i_blkbits == PAGE_CACHE_SHIFT ||
1027 !mapping->a_ops->is_partially_uptodate)
1028 goto page_not_up_to_date;
1029 if (!trylock_page(page))
1030 goto page_not_up_to_date;
1031
1032 if (!page->mapping)
1033 goto page_not_up_to_date_locked;
1034 if (!mapping->a_ops->is_partially_uptodate(page,
1035 desc, offset))
1036 goto page_not_up_to_date_locked;
1037 unlock_page(page);
1038 }
1039page_ok:
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049 isize = i_size_read(inode);
1050 end_index = (isize - 1) >> PAGE_CACHE_SHIFT;
1051 if (unlikely(!isize || index > end_index)) {
1052 page_cache_release(page);
1053 goto out;
1054 }
1055
1056
1057 nr = PAGE_CACHE_SIZE;
1058 if (index == end_index) {
1059 nr = ((isize - 1) & ~PAGE_CACHE_MASK) + 1;
1060 if (nr <= offset) {
1061 page_cache_release(page);
1062 goto out;
1063 }
1064 }
1065 nr = nr - offset;
1066
1067
1068
1069
1070
1071 if (mapping_writably_mapped(mapping))
1072 flush_dcache_page(page);
1073
1074
1075
1076
1077
1078 if (prev_index != index || offset != prev_offset)
1079 mark_page_accessed(page);
1080 prev_index = index;
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092 ret = actor(desc, page, offset, nr);
1093 offset += ret;
1094 index += offset >> PAGE_CACHE_SHIFT;
1095 offset &= ~PAGE_CACHE_MASK;
1096 prev_offset = offset;
1097
1098 page_cache_release(page);
1099 if (ret == nr && desc->count)
1100 continue;
1101 goto out;
1102
1103page_not_up_to_date:
1104
1105 error = lock_page_killable(page);
1106 if (unlikely(error))
1107 goto readpage_error;
1108
1109page_not_up_to_date_locked:
1110
1111 if (!page->mapping) {
1112 unlock_page(page);
1113 page_cache_release(page);
1114 continue;
1115 }
1116
1117
1118 if (PageUptodate(page)) {
1119 unlock_page(page);
1120 goto page_ok;
1121 }
1122
1123readpage:
1124
1125
1126
1127
1128
1129 ClearPageError(page);
1130
1131 error = mapping->a_ops->readpage(filp, page);
1132
1133 if (unlikely(error)) {
1134 if (error == AOP_TRUNCATED_PAGE) {
1135 page_cache_release(page);
1136 goto find_page;
1137 }
1138 goto readpage_error;
1139 }
1140
1141 if (!PageUptodate(page)) {
1142 error = lock_page_killable(page);
1143 if (unlikely(error))
1144 goto readpage_error;
1145 if (!PageUptodate(page)) {
1146 if (page->mapping == NULL) {
1147
1148
1149
1150 unlock_page(page);
1151 page_cache_release(page);
1152 goto find_page;
1153 }
1154 unlock_page(page);
1155 shrink_readahead_size_eio(filp, ra);
1156 error = -EIO;
1157 goto readpage_error;
1158 }
1159 unlock_page(page);
1160 }
1161
1162 goto page_ok;
1163
1164readpage_error:
1165
1166 desc->error = error;
1167 page_cache_release(page);
1168 goto out;
1169
1170no_cached_page:
1171
1172
1173
1174
1175 page = page_cache_alloc_cold(mapping);
1176 if (!page) {
1177 desc->error = -ENOMEM;
1178 goto out;
1179 }
1180 error = add_to_page_cache_lru(page, mapping,
1181 index, GFP_KERNEL);
1182 if (error) {
1183 page_cache_release(page);
1184 if (error == -EEXIST)
1185 goto find_page;
1186 desc->error = error;
1187 goto out;
1188 }
1189 goto readpage;
1190 }
1191
1192out:
1193 ra->prev_pos = prev_index;
1194 ra->prev_pos <<= PAGE_CACHE_SHIFT;
1195 ra->prev_pos |= prev_offset;
1196
1197 *ppos = ((loff_t)index << PAGE_CACHE_SHIFT) + offset;
1198 file_accessed(filp);
1199}
1200
1201int file_read_actor(read_descriptor_t *desc, struct page *page,
1202 unsigned long offset, unsigned long size)
1203{
1204 char *kaddr;
1205 unsigned long left, count = desc->count;
1206
1207 if (size > count)
1208 size = count;
1209
1210
1211
1212
1213
1214 if (!fault_in_pages_writeable(desc->arg.buf, size)) {
1215 kaddr = kmap_atomic(page, KM_USER0);
1216 left = __copy_to_user_inatomic(desc->arg.buf,
1217 kaddr + offset, size);
1218 kunmap_atomic(kaddr, KM_USER0);
1219 if (left == 0)
1220 goto success;
1221 }
1222
1223
1224 kaddr = kmap(page);
1225 left = __copy_to_user(desc->arg.buf, kaddr + offset, size);
1226 kunmap(page);
1227
1228 if (left) {
1229 size -= left;
1230 desc->error = -EFAULT;
1231 }
1232success:
1233 desc->count = count - size;
1234 desc->written += size;
1235 desc->arg.buf += size;
1236 return size;
1237}
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250int generic_segment_checks(const struct iovec *iov,
1251 unsigned long *nr_segs, size_t *count, int access_flags)
1252{
1253 unsigned long seg;
1254 size_t cnt = 0;
1255 for (seg = 0; seg < *nr_segs; seg++) {
1256 const struct iovec *iv = &iov[seg];
1257
1258
1259
1260
1261
1262 cnt += iv->iov_len;
1263 if (unlikely((ssize_t)(cnt|iv->iov_len) < 0))
1264 return -EINVAL;
1265 if (access_ok(access_flags, iv->iov_base, iv->iov_len))
1266 continue;
1267 if (seg == 0)
1268 return -EFAULT;
1269 *nr_segs = seg;
1270 cnt -= iv->iov_len;
1271 break;
1272 }
1273 *count = cnt;
1274 return 0;
1275}
1276EXPORT_SYMBOL(generic_segment_checks);
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288ssize_t
1289generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
1290 unsigned long nr_segs, loff_t pos)
1291{
1292 struct file *filp = iocb->ki_filp;
1293 ssize_t retval;
1294 unsigned long seg = 0;
1295 size_t count;
1296 loff_t *ppos = &iocb->ki_pos;
1297
1298 count = 0;
1299 retval = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE);
1300 if (retval)
1301 return retval;
1302
1303
1304 if (filp->f_flags & O_DIRECT) {
1305 loff_t size;
1306 struct address_space *mapping;
1307 struct inode *inode;
1308
1309 mapping = filp->f_mapping;
1310 inode = mapping->host;
1311 if (!count)
1312 goto out;
1313 size = i_size_read(inode);
1314 if (pos < size) {
1315 retval = filemap_write_and_wait_range(mapping, pos,
1316 pos + iov_length(iov, nr_segs) - 1);
1317 if (!retval) {
1318 retval = mapping->a_ops->direct_IO(READ, iocb,
1319 iov, pos, nr_segs);
1320 }
1321 if (retval > 0) {
1322 *ppos = pos + retval;
1323 count -= retval;
1324 }
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334 if (retval < 0 || !count || *ppos >= size) {
1335 file_accessed(filp);
1336 goto out;
1337 }
1338 }
1339 }
1340
1341 count = retval;
1342 for (seg = 0; seg < nr_segs; seg++) {
1343 read_descriptor_t desc;
1344 loff_t offset = 0;
1345
1346
1347
1348
1349
1350 if (count) {
1351 if (count > iov[seg].iov_len) {
1352 count -= iov[seg].iov_len;
1353 continue;
1354 }
1355 offset = count;
1356 count = 0;
1357 }
1358
1359 desc.written = 0;
1360 desc.arg.buf = iov[seg].iov_base + offset;
1361 desc.count = iov[seg].iov_len - offset;
1362 if (desc.count == 0)
1363 continue;
1364 desc.error = 0;
1365 do_generic_file_read(filp, ppos, &desc, file_read_actor);
1366 retval += desc.written;
1367 if (desc.error) {
1368 retval = retval ?: desc.error;
1369 break;
1370 }
1371 if (desc.count > 0)
1372 break;
1373 }
1374out:
1375 return retval;
1376}
1377EXPORT_SYMBOL(generic_file_aio_read);
1378
1379static ssize_t
1380do_readahead(struct address_space *mapping, struct file *filp,
1381 pgoff_t index, unsigned long nr)
1382{
1383 if (!mapping || !mapping->a_ops || !mapping->a_ops->readpage)
1384 return -EINVAL;
1385
1386 force_page_cache_readahead(mapping, filp, index, nr);
1387 return 0;
1388}
1389
1390SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count)
1391{
1392 ssize_t ret;
1393 struct file *file;
1394
1395 ret = -EBADF;
1396 file = fget(fd);
1397 if (file) {
1398 if (file->f_mode & FMODE_READ) {
1399 struct address_space *mapping = file->f_mapping;
1400 pgoff_t start = offset >> PAGE_CACHE_SHIFT;
1401 pgoff_t end = (offset + count - 1) >> PAGE_CACHE_SHIFT;
1402 unsigned long len = end - start + 1;
1403 ret = do_readahead(mapping, file, start, len);
1404 }
1405 fput(file);
1406 }
1407 return ret;
1408}
1409#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
1410asmlinkage long SyS_readahead(long fd, loff_t offset, long count)
1411{
1412 return SYSC_readahead((int) fd, offset, (size_t) count);
1413}
1414SYSCALL_ALIAS(sys_readahead, SyS_readahead);
1415#endif
1416
1417#ifdef CONFIG_MMU
1418
1419
1420
1421
1422
1423
1424
1425
1426static int page_cache_read(struct file *file, pgoff_t offset)
1427{
1428 struct address_space *mapping = file->f_mapping;
1429 struct page *page;
1430 int ret;
1431
1432 do {
1433 page = page_cache_alloc_cold(mapping);
1434 if (!page)
1435 return -ENOMEM;
1436
1437 ret = add_to_page_cache_lru(page, mapping, offset, GFP_KERNEL);
1438 if (ret == 0)
1439 ret = mapping->a_ops->readpage(file, page);
1440 else if (ret == -EEXIST)
1441 ret = 0;
1442
1443 page_cache_release(page);
1444
1445 } while (ret == AOP_TRUNCATED_PAGE);
1446
1447 return ret;
1448}
1449
1450#define MMAP_LOTSAMISS (100)
1451
1452
1453
1454
1455
1456static void do_sync_mmap_readahead(struct vm_area_struct *vma,
1457 struct file_ra_state *ra,
1458 struct file *file,
1459 pgoff_t offset)
1460{
1461 unsigned long ra_pages;
1462 struct address_space *mapping = file->f_mapping;
1463
1464
1465 if (VM_RandomReadHint(vma))
1466 return;
1467
1468 if (VM_SequentialReadHint(vma) ||
1469 offset - 1 == (ra->prev_pos >> PAGE_CACHE_SHIFT)) {
1470 page_cache_sync_readahead(mapping, ra, file, offset,
1471 ra->ra_pages);
1472 return;
1473 }
1474
1475 if (ra->mmap_miss < INT_MAX)
1476 ra->mmap_miss++;
1477
1478
1479
1480
1481
1482 if (ra->mmap_miss > MMAP_LOTSAMISS)
1483 return;
1484
1485
1486
1487
1488 ra_pages = max_sane_readahead(ra->ra_pages);
1489 if (ra_pages) {
1490 ra->start = max_t(long, 0, offset - ra_pages/2);
1491 ra->size = ra_pages;
1492 ra->async_size = 0;
1493 ra_submit(ra, mapping, file);
1494 }
1495}
1496
1497
1498
1499
1500
1501static void do_async_mmap_readahead(struct vm_area_struct *vma,
1502 struct file_ra_state *ra,
1503 struct file *file,
1504 struct page *page,
1505 pgoff_t offset)
1506{
1507 struct address_space *mapping = file->f_mapping;
1508
1509
1510 if (VM_RandomReadHint(vma))
1511 return;
1512 if (ra->mmap_miss > 0)
1513 ra->mmap_miss--;
1514 if (PageReadahead(page))
1515 page_cache_async_readahead(mapping, ra, file,
1516 page, offset, ra->ra_pages);
1517}
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1532{
1533 int error;
1534 struct file *file = vma->vm_file;
1535 struct address_space *mapping = file->f_mapping;
1536 struct file_ra_state *ra = &file->f_ra;
1537 struct inode *inode = mapping->host;
1538 pgoff_t offset = vmf->pgoff;
1539 struct page *page;
1540 pgoff_t size;
1541 int ret = 0;
1542
1543 size = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1544 if (offset >= size)
1545 return VM_FAULT_SIGBUS;
1546
1547
1548
1549
1550 page = find_get_page(mapping, offset);
1551 if (likely(page)) {
1552
1553
1554
1555
1556 do_async_mmap_readahead(vma, ra, file, page, offset);
1557 } else {
1558
1559 do_sync_mmap_readahead(vma, ra, file, offset);
1560 count_vm_event(PGMAJFAULT);
1561 ret = VM_FAULT_MAJOR;
1562retry_find:
1563 page = find_get_page(mapping, offset);
1564 if (!page)
1565 goto no_cached_page;
1566 }
1567
1568 if (!lock_page_or_retry(page, vma->vm_mm, vmf->flags)) {
1569 page_cache_release(page);
1570 return ret | VM_FAULT_RETRY;
1571 }
1572
1573
1574 if (unlikely(page->mapping != mapping)) {
1575 unlock_page(page);
1576 put_page(page);
1577 goto retry_find;
1578 }
1579 VM_BUG_ON(page->index != offset);
1580
1581
1582
1583
1584
1585 if (unlikely(!PageUptodate(page)))
1586 goto page_not_uptodate;
1587
1588
1589
1590
1591
1592 size = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1593 if (unlikely(offset >= size)) {
1594 unlock_page(page);
1595 page_cache_release(page);
1596 return VM_FAULT_SIGBUS;
1597 }
1598
1599 ra->prev_pos = (loff_t)offset << PAGE_CACHE_SHIFT;
1600 vmf->page = page;
1601 return ret | VM_FAULT_LOCKED;
1602
1603no_cached_page:
1604
1605
1606
1607
1608 error = page_cache_read(file, offset);
1609
1610
1611
1612
1613
1614
1615 if (error >= 0)
1616 goto retry_find;
1617
1618
1619
1620
1621
1622
1623 if (error == -ENOMEM)
1624 return VM_FAULT_OOM;
1625 return VM_FAULT_SIGBUS;
1626
1627page_not_uptodate:
1628
1629
1630
1631
1632
1633
1634 ClearPageError(page);
1635 error = mapping->a_ops->readpage(file, page);
1636 if (!error) {
1637 wait_on_page_locked(page);
1638 if (!PageUptodate(page))
1639 error = -EIO;
1640 }
1641 page_cache_release(page);
1642
1643 if (!error || error == AOP_TRUNCATED_PAGE)
1644 goto retry_find;
1645
1646
1647 shrink_readahead_size_eio(file, ra);
1648 return VM_FAULT_SIGBUS;
1649}
1650EXPORT_SYMBOL(filemap_fault);
1651
1652const struct vm_operations_struct generic_file_vm_ops = {
1653 .fault = filemap_fault,
1654};
1655
1656
1657
1658int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
1659{
1660 struct address_space *mapping = file->f_mapping;
1661
1662 if (!mapping->a_ops->readpage)
1663 return -ENOEXEC;
1664 file_accessed(file);
1665 vma->vm_ops = &generic_file_vm_ops;
1666 vma->vm_flags |= VM_CAN_NONLINEAR;
1667 return 0;
1668}
1669
1670
1671
1672
1673int generic_file_readonly_mmap(struct file *file, struct vm_area_struct *vma)
1674{
1675 if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE))
1676 return -EINVAL;
1677 return generic_file_mmap(file, vma);
1678}
1679#else
1680int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
1681{
1682 return -ENOSYS;
1683}
1684int generic_file_readonly_mmap(struct file * file, struct vm_area_struct * vma)
1685{
1686 return -ENOSYS;
1687}
1688#endif
1689
1690EXPORT_SYMBOL(generic_file_mmap);
1691EXPORT_SYMBOL(generic_file_readonly_mmap);
1692
1693static struct page *__read_cache_page(struct address_space *mapping,
1694 pgoff_t index,
1695 int (*filler)(void *,struct page*),
1696 void *data,
1697 gfp_t gfp)
1698{
1699 struct page *page;
1700 int err;
1701repeat:
1702 page = find_get_page(mapping, index);
1703 if (!page) {
1704 page = __page_cache_alloc(gfp | __GFP_COLD);
1705 if (!page)
1706 return ERR_PTR(-ENOMEM);
1707 err = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL);
1708 if (unlikely(err)) {
1709 page_cache_release(page);
1710 if (err == -EEXIST)
1711 goto repeat;
1712
1713 return ERR_PTR(err);
1714 }
1715 err = filler(data, page);
1716 if (err < 0) {
1717 page_cache_release(page);
1718 page = ERR_PTR(err);
1719 }
1720 }
1721 return page;
1722}
1723
1724static struct page *do_read_cache_page(struct address_space *mapping,
1725 pgoff_t index,
1726 int (*filler)(void *,struct page*),
1727 void *data,
1728 gfp_t gfp)
1729
1730{
1731 struct page *page;
1732 int err;
1733
1734retry:
1735 page = __read_cache_page(mapping, index, filler, data, gfp);
1736 if (IS_ERR(page))
1737 return page;
1738 if (PageUptodate(page))
1739 goto out;
1740
1741 lock_page(page);
1742 if (!page->mapping) {
1743 unlock_page(page);
1744 page_cache_release(page);
1745 goto retry;
1746 }
1747 if (PageUptodate(page)) {
1748 unlock_page(page);
1749 goto out;
1750 }
1751 err = filler(data, page);
1752 if (err < 0) {
1753 page_cache_release(page);
1754 return ERR_PTR(err);
1755 }
1756out:
1757 mark_page_accessed(page);
1758 return page;
1759}
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776struct page *read_cache_page_async(struct address_space *mapping,
1777 pgoff_t index,
1778 int (*filler)(void *,struct page*),
1779 void *data)
1780{
1781 return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping));
1782}
1783EXPORT_SYMBOL(read_cache_page_async);
1784
1785static struct page *wait_on_page_read(struct page *page)
1786{
1787 if (!IS_ERR(page)) {
1788 wait_on_page_locked(page);
1789 if (!PageUptodate(page)) {
1790 page_cache_release(page);
1791 page = ERR_PTR(-EIO);
1792 }
1793 }
1794 return page;
1795}
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811struct page *read_cache_page_gfp(struct address_space *mapping,
1812 pgoff_t index,
1813 gfp_t gfp)
1814{
1815 filler_t *filler = (filler_t *)mapping->a_ops->readpage;
1816
1817 return wait_on_page_read(do_read_cache_page(mapping, index, filler, NULL, gfp));
1818}
1819EXPORT_SYMBOL(read_cache_page_gfp);
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833struct page *read_cache_page(struct address_space *mapping,
1834 pgoff_t index,
1835 int (*filler)(void *,struct page*),
1836 void *data)
1837{
1838 return wait_on_page_read(read_cache_page_async(mapping, index, filler, data));
1839}
1840EXPORT_SYMBOL(read_cache_page);
1841
1842
1843
1844
1845
1846
1847
1848int should_remove_suid(struct dentry *dentry)
1849{
1850 mode_t mode = dentry->d_inode->i_mode;
1851 int kill = 0;
1852
1853
1854 if (unlikely(mode & S_ISUID))
1855 kill = ATTR_KILL_SUID;
1856
1857
1858
1859
1860
1861 if (unlikely((mode & S_ISGID) && (mode & S_IXGRP)))
1862 kill |= ATTR_KILL_SGID;
1863
1864 if (unlikely(kill && !capable(CAP_FSETID) && S_ISREG(mode)))
1865 return kill;
1866
1867 return 0;
1868}
1869EXPORT_SYMBOL(should_remove_suid);
1870
1871static int __remove_suid(struct dentry *dentry, int kill)
1872{
1873 struct iattr newattrs;
1874
1875 newattrs.ia_valid = ATTR_FORCE | kill;
1876 return notify_change(dentry, &newattrs);
1877}
1878
1879int file_remove_suid(struct file *file)
1880{
1881 struct dentry *dentry = file->f_path.dentry;
1882 int killsuid = should_remove_suid(dentry);
1883 int killpriv = security_inode_need_killpriv(dentry);
1884 int error = 0;
1885
1886 if (killpriv < 0)
1887 return killpriv;
1888 if (killpriv)
1889 error = security_inode_killpriv(dentry);
1890 if (!error && killsuid)
1891 error = __remove_suid(dentry, killsuid);
1892
1893 return error;
1894}
1895EXPORT_SYMBOL(file_remove_suid);
1896
1897static size_t __iovec_copy_from_user_inatomic(char *vaddr,
1898 const struct iovec *iov, size_t base, size_t bytes)
1899{
1900 size_t copied = 0, left = 0;
1901
1902 while (bytes) {
1903 char __user *buf = iov->iov_base + base;
1904 int copy = min(bytes, iov->iov_len - base);
1905
1906 base = 0;
1907 left = __copy_from_user_inatomic(vaddr, buf, copy);
1908 copied += copy;
1909 bytes -= copy;
1910 vaddr += copy;
1911 iov++;
1912
1913 if (unlikely(left))
1914 break;
1915 }
1916 return copied - left;
1917}
1918
1919
1920
1921
1922
1923
1924size_t iov_iter_copy_from_user_atomic(struct page *page,
1925 struct iov_iter *i, unsigned long offset, size_t bytes)
1926{
1927 char *kaddr;
1928 size_t copied;
1929
1930 BUG_ON(!in_atomic());
1931 kaddr = kmap_atomic(page, KM_USER0);
1932 if (likely(i->nr_segs == 1)) {
1933 int left;
1934 char __user *buf = i->iov->iov_base + i->iov_offset;
1935 left = __copy_from_user_inatomic(kaddr + offset, buf, bytes);
1936 copied = bytes - left;
1937 } else {
1938 copied = __iovec_copy_from_user_inatomic(kaddr + offset,
1939 i->iov, i->iov_offset, bytes);
1940 }
1941 kunmap_atomic(kaddr, KM_USER0);
1942
1943 return copied;
1944}
1945EXPORT_SYMBOL(iov_iter_copy_from_user_atomic);
1946
1947
1948
1949
1950
1951
1952
1953size_t iov_iter_copy_from_user(struct page *page,
1954 struct iov_iter *i, unsigned long offset, size_t bytes)
1955{
1956 char *kaddr;
1957 size_t copied;
1958
1959 kaddr = kmap(page);
1960 if (likely(i->nr_segs == 1)) {
1961 int left;
1962 char __user *buf = i->iov->iov_base + i->iov_offset;
1963 left = __copy_from_user(kaddr + offset, buf, bytes);
1964 copied = bytes - left;
1965 } else {
1966 copied = __iovec_copy_from_user_inatomic(kaddr + offset,
1967 i->iov, i->iov_offset, bytes);
1968 }
1969 kunmap(page);
1970 return copied;
1971}
1972EXPORT_SYMBOL(iov_iter_copy_from_user);
1973
1974void iov_iter_advance(struct iov_iter *i, size_t bytes)
1975{
1976 BUG_ON(i->count < bytes);
1977
1978 if (likely(i->nr_segs == 1)) {
1979 i->iov_offset += bytes;
1980 i->count -= bytes;
1981 } else {
1982 const struct iovec *iov = i->iov;
1983 size_t base = i->iov_offset;
1984
1985
1986
1987
1988
1989 while (bytes || unlikely(i->count && !iov->iov_len)) {
1990 int copy;
1991
1992 copy = min(bytes, iov->iov_len - base);
1993 BUG_ON(!i->count || i->count < copy);
1994 i->count -= copy;
1995 bytes -= copy;
1996 base += copy;
1997 if (iov->iov_len == base) {
1998 iov++;
1999 base = 0;
2000 }
2001 }
2002 i->iov = iov;
2003 i->iov_offset = base;
2004 }
2005}
2006EXPORT_SYMBOL(iov_iter_advance);
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes)
2018{
2019 char __user *buf = i->iov->iov_base + i->iov_offset;
2020 bytes = min(bytes, i->iov->iov_len - i->iov_offset);
2021 return fault_in_pages_readable(buf, bytes);
2022}
2023EXPORT_SYMBOL(iov_iter_fault_in_readable);
2024
2025
2026
2027
2028size_t iov_iter_single_seg_count(struct iov_iter *i)
2029{
2030 const struct iovec *iov = i->iov;
2031 if (i->nr_segs == 1)
2032 return i->count;
2033 else
2034 return min(i->count, iov->iov_len - i->iov_offset);
2035}
2036EXPORT_SYMBOL(iov_iter_single_seg_count);
2037
2038
2039
2040
2041
2042
2043
2044
2045inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk)
2046{
2047 struct inode *inode = file->f_mapping->host;
2048 unsigned long limit = rlimit(RLIMIT_FSIZE);
2049
2050 if (unlikely(*pos < 0))
2051 return -EINVAL;
2052
2053 if (!isblk) {
2054
2055 if (file->f_flags & O_APPEND)
2056 *pos = i_size_read(inode);
2057
2058 if (limit != RLIM_INFINITY) {
2059 if (*pos >= limit) {
2060 send_sig(SIGXFSZ, current, 0);
2061 return -EFBIG;
2062 }
2063 if (*count > limit - (typeof(limit))*pos) {
2064 *count = limit - (typeof(limit))*pos;
2065 }
2066 }
2067 }
2068
2069
2070
2071
2072 if (unlikely(*pos + *count > MAX_NON_LFS &&
2073 !(file->f_flags & O_LARGEFILE))) {
2074 if (*pos >= MAX_NON_LFS) {
2075 return -EFBIG;
2076 }
2077 if (*count > MAX_NON_LFS - (unsigned long)*pos) {
2078 *count = MAX_NON_LFS - (unsigned long)*pos;
2079 }
2080 }
2081
2082
2083
2084
2085
2086
2087
2088
2089 if (likely(!isblk)) {
2090 if (unlikely(*pos >= inode->i_sb->s_maxbytes)) {
2091 if (*count || *pos > inode->i_sb->s_maxbytes) {
2092 return -EFBIG;
2093 }
2094
2095 }
2096
2097 if (unlikely(*pos + *count > inode->i_sb->s_maxbytes))
2098 *count = inode->i_sb->s_maxbytes - *pos;
2099 } else {
2100#ifdef CONFIG_BLOCK
2101 loff_t isize;
2102 if (bdev_read_only(I_BDEV(inode)))
2103 return -EPERM;
2104 isize = i_size_read(inode);
2105 if (*pos >= isize) {
2106 if (*count || *pos > isize)
2107 return -ENOSPC;
2108 }
2109
2110 if (*pos + *count > isize)
2111 *count = isize - *pos;
2112#else
2113 return -EPERM;
2114#endif
2115 }
2116 return 0;
2117}
2118EXPORT_SYMBOL(generic_write_checks);
2119
2120int pagecache_write_begin(struct file *file, struct address_space *mapping,
2121 loff_t pos, unsigned len, unsigned flags,
2122 struct page **pagep, void **fsdata)
2123{
2124 const struct address_space_operations *aops = mapping->a_ops;
2125
2126 return aops->write_begin(file, mapping, pos, len, flags,
2127 pagep, fsdata);
2128}
2129EXPORT_SYMBOL(pagecache_write_begin);
2130
2131int pagecache_write_end(struct file *file, struct address_space *mapping,
2132 loff_t pos, unsigned len, unsigned copied,
2133 struct page *page, void *fsdata)
2134{
2135 const struct address_space_operations *aops = mapping->a_ops;
2136
2137 mark_page_accessed(page);
2138 return aops->write_end(file, mapping, pos, len, copied, page, fsdata);
2139}
2140EXPORT_SYMBOL(pagecache_write_end);
2141
2142ssize_t
2143generic_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
2144 unsigned long *nr_segs, loff_t pos, loff_t *ppos,
2145 size_t count, size_t ocount)
2146{
2147 struct file *file = iocb->ki_filp;
2148 struct address_space *mapping = file->f_mapping;
2149 struct inode *inode = mapping->host;
2150 ssize_t written;
2151 size_t write_len;
2152 pgoff_t end;
2153
2154 if (count != ocount)
2155 *nr_segs = iov_shorten((struct iovec *)iov, *nr_segs, count);
2156
2157 write_len = iov_length(iov, *nr_segs);
2158 end = (pos + write_len - 1) >> PAGE_CACHE_SHIFT;
2159
2160 written = filemap_write_and_wait_range(mapping, pos, pos + write_len - 1);
2161 if (written)
2162 goto out;
2163
2164
2165
2166
2167
2168
2169
2170 if (mapping->nrpages) {
2171 written = invalidate_inode_pages2_range(mapping,
2172 pos >> PAGE_CACHE_SHIFT, end);
2173
2174
2175
2176
2177 if (written) {
2178 if (written == -EBUSY)
2179 return 0;
2180 goto out;
2181 }
2182 }
2183
2184 written = mapping->a_ops->direct_IO(WRITE, iocb, iov, pos, *nr_segs);
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194 if (mapping->nrpages) {
2195 invalidate_inode_pages2_range(mapping,
2196 pos >> PAGE_CACHE_SHIFT, end);
2197 }
2198
2199 if (written > 0) {
2200 pos += written;
2201 if (pos > i_size_read(inode) && !S_ISBLK(inode->i_mode)) {
2202 i_size_write(inode, pos);
2203 mark_inode_dirty(inode);
2204 }
2205 *ppos = pos;
2206 }
2207out:
2208 return written;
2209}
2210EXPORT_SYMBOL(generic_file_direct_write);
2211
2212
2213
2214
2215
2216struct page *grab_cache_page_write_begin(struct address_space *mapping,
2217 pgoff_t index, unsigned flags)
2218{
2219 int status;
2220 struct page *page;
2221 gfp_t gfp_notmask = 0;
2222 if (flags & AOP_FLAG_NOFS)
2223 gfp_notmask = __GFP_FS;
2224repeat:
2225 page = find_lock_page(mapping, index);
2226 if (likely(page))
2227 return page;
2228
2229 page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask);
2230 if (!page)
2231 return NULL;
2232 status = add_to_page_cache_lru(page, mapping, index,
2233 GFP_KERNEL & ~gfp_notmask);
2234 if (unlikely(status)) {
2235 page_cache_release(page);
2236 if (status == -EEXIST)
2237 goto repeat;
2238 return NULL;
2239 }
2240 return page;
2241}
2242EXPORT_SYMBOL(grab_cache_page_write_begin);
2243
2244static ssize_t generic_perform_write(struct file *file,
2245 struct iov_iter *i, loff_t pos)
2246{
2247 struct address_space *mapping = file->f_mapping;
2248 const struct address_space_operations *a_ops = mapping->a_ops;
2249 long status = 0;
2250 ssize_t written = 0;
2251 unsigned int flags = 0;
2252
2253
2254
2255
2256 if (segment_eq(get_fs(), KERNEL_DS))
2257 flags |= AOP_FLAG_UNINTERRUPTIBLE;
2258
2259 do {
2260 struct page *page;
2261 unsigned long offset;
2262 unsigned long bytes;
2263 size_t copied;
2264 void *fsdata;
2265
2266 offset = (pos & (PAGE_CACHE_SIZE - 1));
2267 bytes = min_t(unsigned long, PAGE_CACHE_SIZE - offset,
2268 iov_iter_count(i));
2269
2270again:
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282 if (unlikely(iov_iter_fault_in_readable(i, bytes))) {
2283 status = -EFAULT;
2284 break;
2285 }
2286
2287 status = a_ops->write_begin(file, mapping, pos, bytes, flags,
2288 &page, &fsdata);
2289 if (unlikely(status))
2290 break;
2291
2292 if (mapping_writably_mapped(mapping))
2293 flush_dcache_page(page);
2294
2295 pagefault_disable();
2296 copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes);
2297 pagefault_enable();
2298 flush_dcache_page(page);
2299
2300 mark_page_accessed(page);
2301 status = a_ops->write_end(file, mapping, pos, bytes, copied,
2302 page, fsdata);
2303 if (unlikely(status < 0))
2304 break;
2305 copied = status;
2306
2307 cond_resched();
2308
2309 iov_iter_advance(i, copied);
2310 if (unlikely(copied == 0)) {
2311
2312
2313
2314
2315
2316
2317
2318
2319 bytes = min_t(unsigned long, PAGE_CACHE_SIZE - offset,
2320 iov_iter_single_seg_count(i));
2321 goto again;
2322 }
2323 pos += copied;
2324 written += copied;
2325
2326 balance_dirty_pages_ratelimited(mapping);
2327
2328 } while (iov_iter_count(i));
2329
2330 return written ? written : status;
2331}
2332
2333ssize_t
2334generic_file_buffered_write(struct kiocb *iocb, const struct iovec *iov,
2335 unsigned long nr_segs, loff_t pos, loff_t *ppos,
2336 size_t count, ssize_t written)
2337{
2338 struct file *file = iocb->ki_filp;
2339 ssize_t status;
2340 struct iov_iter i;
2341
2342 iov_iter_init(&i, iov, nr_segs, count, written);
2343 status = generic_perform_write(file, &i, pos);
2344
2345 if (likely(status >= 0)) {
2346 written += status;
2347 *ppos = pos + status;
2348 }
2349
2350 return written ? written : status;
2351}
2352EXPORT_SYMBOL(generic_file_buffered_write);
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2374 unsigned long nr_segs, loff_t *ppos)
2375{
2376 struct file *file = iocb->ki_filp;
2377 struct address_space * mapping = file->f_mapping;
2378 size_t ocount;
2379 size_t count;
2380 struct inode *inode = mapping->host;
2381 loff_t pos;
2382 ssize_t written;
2383 ssize_t err;
2384
2385 ocount = 0;
2386 err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ);
2387 if (err)
2388 return err;
2389
2390 count = ocount;
2391 pos = *ppos;
2392
2393 vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
2394
2395
2396 current->backing_dev_info = mapping->backing_dev_info;
2397 written = 0;
2398
2399 err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode));
2400 if (err)
2401 goto out;
2402
2403 if (count == 0)
2404 goto out;
2405
2406 err = file_remove_suid(file);
2407 if (err)
2408 goto out;
2409
2410 file_update_time(file);
2411
2412
2413 if (unlikely(file->f_flags & O_DIRECT)) {
2414 loff_t endbyte;
2415 ssize_t written_buffered;
2416
2417 written = generic_file_direct_write(iocb, iov, &nr_segs, pos,
2418 ppos, count, ocount);
2419 if (written < 0 || written == count)
2420 goto out;
2421
2422
2423
2424
2425 pos += written;
2426 count -= written;
2427 written_buffered = generic_file_buffered_write(iocb, iov,
2428 nr_segs, pos, ppos, count,
2429 written);
2430
2431
2432
2433
2434
2435
2436
2437 if (written_buffered < 0) {
2438 err = written_buffered;
2439 goto out;
2440 }
2441
2442
2443
2444
2445
2446
2447 endbyte = pos + written_buffered - written - 1;
2448 err = filemap_write_and_wait_range(file->f_mapping, pos, endbyte);
2449 if (err == 0) {
2450 written = written_buffered;
2451 invalidate_mapping_pages(mapping,
2452 pos >> PAGE_CACHE_SHIFT,
2453 endbyte >> PAGE_CACHE_SHIFT);
2454 } else {
2455
2456
2457
2458
2459 }
2460 } else {
2461 written = generic_file_buffered_write(iocb, iov, nr_segs,
2462 pos, ppos, count, written);
2463 }
2464out:
2465 current->backing_dev_info = NULL;
2466 return written ? written : err;
2467}
2468EXPORT_SYMBOL(__generic_file_aio_write);
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2482 unsigned long nr_segs, loff_t pos)
2483{
2484 struct file *file = iocb->ki_filp;
2485 struct inode *inode = file->f_mapping->host;
2486 ssize_t ret;
2487
2488 BUG_ON(iocb->ki_pos != pos);
2489
2490 mutex_lock(&inode->i_mutex);
2491 ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
2492 mutex_unlock(&inode->i_mutex);
2493
2494 if (ret > 0 || ret == -EIOCBQUEUED) {
2495 ssize_t err;
2496
2497 err = generic_write_sync(file, pos, ret);
2498 if (err < 0 && ret > 0)
2499 ret = err;
2500 }
2501 return ret;
2502}
2503EXPORT_SYMBOL(generic_file_aio_write);
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522int try_to_release_page(struct page *page, gfp_t gfp_mask)
2523{
2524 struct address_space * const mapping = page->mapping;
2525
2526 BUG_ON(!PageLocked(page));
2527 if (PageWriteback(page))
2528 return 0;
2529
2530 if (mapping && mapping->a_ops->releasepage)
2531 return mapping->a_ops->releasepage(page, gfp_mask);
2532 return try_to_free_buffers(page);
2533}
2534
2535EXPORT_SYMBOL(try_to_release_page);
2536