1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <linux/mm.h>
15#include <linux/module.h>
16#include <linux/gfp.h>
17#include <linux/kernel_stat.h>
18#include <linux/swap.h>
19#include <linux/pagemap.h>
20#include <linux/init.h>
21#include <linux/highmem.h>
22#include <linux/vmstat.h>
23#include <linux/file.h>
24#include <linux/writeback.h>
25#include <linux/blkdev.h>
26#include <linux/buffer_head.h>
27
28#include <linux/mm_inline.h>
29#include <linux/pagevec.h>
30#include <linux/backing-dev.h>
31#include <linux/rmap.h>
32#include <linux/topology.h>
33#include <linux/cpu.h>
34#include <linux/cpuset.h>
35#include <linux/compaction.h>
36#include <linux/notifier.h>
37#include <linux/rwsem.h>
38#include <linux/delay.h>
39#include <linux/kthread.h>
40#include <linux/freezer.h>
41#include <linux/memcontrol.h>
42#include <linux/delayacct.h>
43#include <linux/sysctl.h>
44#include <linux/oom.h>
45#include <linux/prefetch.h>
46
47#include <asm/tlbflush.h>
48#include <asm/div64.h>
49
50#include <linux/swapops.h>
51
52#include "internal.h"
53
54#define CREATE_TRACE_POINTS
55#include <trace/events/vmscan.h>
56
57
58
59
60
61
62
63
64
65
66
67
68typedef unsigned __bitwise__ reclaim_mode_t;
69#define RECLAIM_MODE_SINGLE ((__force reclaim_mode_t)0x01u)
70#define RECLAIM_MODE_ASYNC ((__force reclaim_mode_t)0x02u)
71#define RECLAIM_MODE_SYNC ((__force reclaim_mode_t)0x04u)
72#define RECLAIM_MODE_LUMPYRECLAIM ((__force reclaim_mode_t)0x08u)
73#define RECLAIM_MODE_COMPACTION ((__force reclaim_mode_t)0x10u)
74
75struct scan_control {
76
77 unsigned long nr_scanned;
78
79
80 unsigned long nr_reclaimed;
81
82
83 unsigned long nr_to_reclaim;
84
85 unsigned long hibernation_mode;
86
87
88 gfp_t gfp_mask;
89
90 int may_writepage;
91
92
93 int may_unmap;
94
95
96 int may_swap;
97
98 int order;
99
100
101
102
103
104 reclaim_mode_t reclaim_mode;
105
106
107 struct mem_cgroup *mem_cgroup;
108
109
110
111
112
113 nodemask_t *nodemask;
114};
115
116#define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru))
117
118#ifdef ARCH_HAS_PREFETCH
119#define prefetch_prev_lru_page(_page, _base, _field) \
120 do { \
121 if ((_page)->lru.prev != _base) { \
122 struct page *prev; \
123 \
124 prev = lru_to_page(&(_page->lru)); \
125 prefetch(&prev->_field); \
126 } \
127 } while (0)
128#else
129#define prefetch_prev_lru_page(_page, _base, _field) do { } while (0)
130#endif
131
132#ifdef ARCH_HAS_PREFETCHW
133#define prefetchw_prev_lru_page(_page, _base, _field) \
134 do { \
135 if ((_page)->lru.prev != _base) { \
136 struct page *prev; \
137 \
138 prev = lru_to_page(&(_page->lru)); \
139 prefetchw(&prev->_field); \
140 } \
141 } while (0)
142#else
143#define prefetchw_prev_lru_page(_page, _base, _field) do { } while (0)
144#endif
145
146
147
148
149int vm_swappiness = 60;
150long vm_total_pages;
151
152static LIST_HEAD(shrinker_list);
153static DECLARE_RWSEM(shrinker_rwsem);
154
155#ifdef CONFIG_CGROUP_MEM_RES_CTLR
156#define scanning_global_lru(sc) (!(sc)->mem_cgroup)
157#else
158#define scanning_global_lru(sc) (1)
159#endif
160
161static struct zone_reclaim_stat *get_reclaim_stat(struct zone *zone,
162 struct scan_control *sc)
163{
164 if (!scanning_global_lru(sc))
165 return mem_cgroup_get_reclaim_stat(sc->mem_cgroup, zone);
166
167 return &zone->reclaim_stat;
168}
169
170static unsigned long zone_nr_lru_pages(struct zone *zone,
171 struct scan_control *sc, enum lru_list lru)
172{
173 if (!scanning_global_lru(sc))
174 return mem_cgroup_zone_nr_lru_pages(sc->mem_cgroup,
175 zone_to_nid(zone), zone_idx(zone), BIT(lru));
176
177 return zone_page_state(zone, NR_LRU_BASE + lru);
178}
179
180
181
182
183
184void register_shrinker(struct shrinker *shrinker)
185{
186 shrinker->nr = 0;
187 down_write(&shrinker_rwsem);
188 list_add_tail(&shrinker->list, &shrinker_list);
189 up_write(&shrinker_rwsem);
190}
191EXPORT_SYMBOL(register_shrinker);
192
193
194
195
196void unregister_shrinker(struct shrinker *shrinker)
197{
198 down_write(&shrinker_rwsem);
199 list_del(&shrinker->list);
200 up_write(&shrinker_rwsem);
201}
202EXPORT_SYMBOL(unregister_shrinker);
203
204static inline int do_shrinker_shrink(struct shrinker *shrinker,
205 struct shrink_control *sc,
206 unsigned long nr_to_scan)
207{
208 sc->nr_to_scan = nr_to_scan;
209 return (*shrinker->shrink)(shrinker, sc);
210}
211
212#define SHRINK_BATCH 128
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232unsigned long shrink_slab(struct shrink_control *shrink,
233 unsigned long nr_pages_scanned,
234 unsigned long lru_pages)
235{
236 struct shrinker *shrinker;
237 unsigned long ret = 0;
238
239 if (nr_pages_scanned == 0)
240 nr_pages_scanned = SWAP_CLUSTER_MAX;
241
242 if (!down_read_trylock(&shrinker_rwsem)) {
243
244 ret = 1;
245 goto out;
246 }
247
248 list_for_each_entry(shrinker, &shrinker_list, list) {
249 unsigned long long delta;
250 unsigned long total_scan;
251 unsigned long max_pass;
252 int shrink_ret = 0;
253 long nr;
254 long new_nr;
255 long batch_size = shrinker->batch ? shrinker->batch
256 : SHRINK_BATCH;
257
258
259
260
261
262
263 do {
264 nr = shrinker->nr;
265 } while (cmpxchg(&shrinker->nr, nr, 0) != nr);
266
267 total_scan = nr;
268 max_pass = do_shrinker_shrink(shrinker, shrink, 0);
269 delta = (4 * nr_pages_scanned) / shrinker->seeks;
270 delta *= max_pass;
271 do_div(delta, lru_pages + 1);
272 total_scan += delta;
273 if (total_scan < 0) {
274 printk(KERN_ERR "shrink_slab: %pF negative objects to "
275 "delete nr=%ld\n",
276 shrinker->shrink, total_scan);
277 total_scan = max_pass;
278 }
279
280
281
282
283
284
285
286
287
288
289
290
291
292 if (delta < max_pass / 4)
293 total_scan = min(total_scan, max_pass / 2);
294
295
296
297
298
299
300 if (total_scan > max_pass * 2)
301 total_scan = max_pass * 2;
302
303 trace_mm_shrink_slab_start(shrinker, shrink, nr,
304 nr_pages_scanned, lru_pages,
305 max_pass, delta, total_scan);
306
307 while (total_scan >= batch_size) {
308 int nr_before;
309
310 nr_before = do_shrinker_shrink(shrinker, shrink, 0);
311 shrink_ret = do_shrinker_shrink(shrinker, shrink,
312 batch_size);
313 if (shrink_ret == -1)
314 break;
315 if (shrink_ret < nr_before)
316 ret += nr_before - shrink_ret;
317 count_vm_events(SLABS_SCANNED, batch_size);
318 total_scan -= batch_size;
319
320 cond_resched();
321 }
322
323
324
325
326
327
328 do {
329 nr = shrinker->nr;
330 new_nr = total_scan + nr;
331 if (total_scan <= 0)
332 break;
333 } while (cmpxchg(&shrinker->nr, nr, new_nr) != nr);
334
335 trace_mm_shrink_slab_end(shrinker, shrink_ret, nr, new_nr);
336 }
337 up_read(&shrinker_rwsem);
338out:
339 cond_resched();
340 return ret;
341}
342
343static void set_reclaim_mode(int priority, struct scan_control *sc,
344 bool sync)
345{
346 reclaim_mode_t syncmode = sync ? RECLAIM_MODE_SYNC : RECLAIM_MODE_ASYNC;
347
348
349
350
351
352
353 if (COMPACTION_BUILD)
354 sc->reclaim_mode = RECLAIM_MODE_COMPACTION;
355 else
356 sc->reclaim_mode = RECLAIM_MODE_LUMPYRECLAIM;
357
358
359
360
361
362
363 if (sc->order > PAGE_ALLOC_COSTLY_ORDER)
364 sc->reclaim_mode |= syncmode;
365 else if (sc->order && priority < DEF_PRIORITY - 2)
366 sc->reclaim_mode |= syncmode;
367 else
368 sc->reclaim_mode = RECLAIM_MODE_SINGLE | RECLAIM_MODE_ASYNC;
369}
370
371static void reset_reclaim_mode(struct scan_control *sc)
372{
373 sc->reclaim_mode = RECLAIM_MODE_SINGLE | RECLAIM_MODE_ASYNC;
374}
375
376static inline int is_page_cache_freeable(struct page *page)
377{
378
379
380
381
382
383 return page_count(page) - page_has_private(page) == 2;
384}
385
386static int may_write_to_queue(struct backing_dev_info *bdi,
387 struct scan_control *sc)
388{
389 if (current->flags & PF_SWAPWRITE)
390 return 1;
391 if (!bdi_write_congested(bdi))
392 return 1;
393 if (bdi == current->backing_dev_info)
394 return 1;
395
396
397 if (sc->order > PAGE_ALLOC_COSTLY_ORDER)
398 return 1;
399 return 0;
400}
401
402
403
404
405
406
407
408
409
410
411
412
413
414static void handle_write_error(struct address_space *mapping,
415 struct page *page, int error)
416{
417 lock_page(page);
418 if (page_mapping(page) == mapping)
419 mapping_set_error(mapping, error);
420 unlock_page(page);
421}
422
423
424typedef enum {
425
426 PAGE_KEEP,
427
428 PAGE_ACTIVATE,
429
430 PAGE_SUCCESS,
431
432 PAGE_CLEAN,
433} pageout_t;
434
435
436
437
438
439static pageout_t pageout(struct page *page, struct address_space *mapping,
440 struct scan_control *sc)
441{
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458 if (!is_page_cache_freeable(page))
459 return PAGE_KEEP;
460 if (!mapping) {
461
462
463
464
465 if (page_has_private(page)) {
466 if (try_to_free_buffers(page)) {
467 ClearPageDirty(page);
468 printk("%s: orphaned page\n", __func__);
469 return PAGE_CLEAN;
470 }
471 }
472 return PAGE_KEEP;
473 }
474 if (mapping->a_ops->writepage == NULL)
475 return PAGE_ACTIVATE;
476 if (!may_write_to_queue(mapping->backing_dev_info, sc))
477 return PAGE_KEEP;
478
479 if (clear_page_dirty_for_io(page)) {
480 int res;
481 struct writeback_control wbc = {
482 .sync_mode = WB_SYNC_NONE,
483 .nr_to_write = SWAP_CLUSTER_MAX,
484 .range_start = 0,
485 .range_end = LLONG_MAX,
486 .for_reclaim = 1,
487 };
488
489 SetPageReclaim(page);
490 res = mapping->a_ops->writepage(page, &wbc);
491 if (res < 0)
492 handle_write_error(mapping, page, res);
493 if (res == AOP_WRITEPAGE_ACTIVATE) {
494 ClearPageReclaim(page);
495 return PAGE_ACTIVATE;
496 }
497
498
499
500
501
502
503 if (PageWriteback(page) &&
504 (sc->reclaim_mode & RECLAIM_MODE_SYNC))
505 wait_on_page_writeback(page);
506
507 if (!PageWriteback(page)) {
508
509 ClearPageReclaim(page);
510 }
511 trace_mm_vmscan_writepage(page,
512 trace_reclaim_flags(page, sc->reclaim_mode));
513 inc_zone_page_state(page, NR_VMSCAN_WRITE);
514 return PAGE_SUCCESS;
515 }
516
517 return PAGE_CLEAN;
518}
519
520
521
522
523
524static int __remove_mapping(struct address_space *mapping, struct page *page)
525{
526 BUG_ON(!PageLocked(page));
527 BUG_ON(mapping != page_mapping(page));
528
529 spin_lock_irq(&mapping->tree_lock);
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555 if (!page_freeze_refs(page, 2))
556 goto cannot_free;
557
558 if (unlikely(PageDirty(page))) {
559 page_unfreeze_refs(page, 2);
560 goto cannot_free;
561 }
562
563 if (PageSwapCache(page)) {
564 swp_entry_t swap = { .val = page_private(page) };
565 __delete_from_swap_cache(page);
566 spin_unlock_irq(&mapping->tree_lock);
567 swapcache_free(swap, page);
568 } else {
569 void (*freepage)(struct page *);
570
571 freepage = mapping->a_ops->freepage;
572
573 __delete_from_page_cache(page);
574 spin_unlock_irq(&mapping->tree_lock);
575 mem_cgroup_uncharge_cache_page(page);
576
577 if (freepage != NULL)
578 freepage(page);
579 }
580
581 return 1;
582
583cannot_free:
584 spin_unlock_irq(&mapping->tree_lock);
585 return 0;
586}
587
588
589
590
591
592
593
594int remove_mapping(struct address_space *mapping, struct page *page)
595{
596 if (__remove_mapping(mapping, page)) {
597
598
599
600
601
602 page_unfreeze_refs(page, 1);
603 return 1;
604 }
605 return 0;
606}
607
608
609
610
611
612
613
614
615
616
617void putback_lru_page(struct page *page)
618{
619 int lru;
620 int active = !!TestClearPageActive(page);
621 int was_unevictable = PageUnevictable(page);
622
623 VM_BUG_ON(PageLRU(page));
624
625redo:
626 ClearPageUnevictable(page);
627
628 if (page_evictable(page, NULL)) {
629
630
631
632
633
634
635 lru = active + page_lru_base_type(page);
636 lru_cache_add_lru(page, lru);
637 } else {
638
639
640
641
642 lru = LRU_UNEVICTABLE;
643 add_page_to_unevictable_list(page);
644
645
646
647
648
649
650
651
652
653 smp_mb();
654 }
655
656
657
658
659
660
661 if (lru == LRU_UNEVICTABLE && page_evictable(page, NULL)) {
662 if (!isolate_lru_page(page)) {
663 put_page(page);
664 goto redo;
665 }
666
667
668
669
670 }
671
672 if (was_unevictable && lru != LRU_UNEVICTABLE)
673 count_vm_event(UNEVICTABLE_PGRESCUED);
674 else if (!was_unevictable && lru == LRU_UNEVICTABLE)
675 count_vm_event(UNEVICTABLE_PGCULLED);
676
677 put_page(page);
678}
679
680enum page_references {
681 PAGEREF_RECLAIM,
682 PAGEREF_RECLAIM_CLEAN,
683 PAGEREF_KEEP,
684 PAGEREF_ACTIVATE,
685};
686
687static enum page_references page_check_references(struct page *page,
688 struct scan_control *sc)
689{
690 int referenced_ptes, referenced_page;
691 unsigned long vm_flags;
692
693 referenced_ptes = page_referenced(page, 1, sc->mem_cgroup, &vm_flags);
694 referenced_page = TestClearPageReferenced(page);
695
696
697 if (sc->reclaim_mode & RECLAIM_MODE_LUMPYRECLAIM)
698 return PAGEREF_RECLAIM;
699
700
701
702
703
704 if (vm_flags & VM_LOCKED)
705 return PAGEREF_RECLAIM;
706
707 if (referenced_ptes) {
708 if (PageAnon(page))
709 return PAGEREF_ACTIVATE;
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724 SetPageReferenced(page);
725
726 if (referenced_page)
727 return PAGEREF_ACTIVATE;
728
729 return PAGEREF_KEEP;
730 }
731
732
733 if (referenced_page && !PageSwapBacked(page))
734 return PAGEREF_RECLAIM_CLEAN;
735
736 return PAGEREF_RECLAIM;
737}
738
739static noinline_for_stack void free_page_list(struct list_head *free_pages)
740{
741 struct pagevec freed_pvec;
742 struct page *page, *tmp;
743
744 pagevec_init(&freed_pvec, 1);
745
746 list_for_each_entry_safe(page, tmp, free_pages, lru) {
747 list_del(&page->lru);
748 if (!pagevec_add(&freed_pvec, page)) {
749 __pagevec_free(&freed_pvec);
750 pagevec_reinit(&freed_pvec);
751 }
752 }
753
754 pagevec_free(&freed_pvec);
755}
756
757
758
759
760static unsigned long shrink_page_list(struct list_head *page_list,
761 struct zone *zone,
762 struct scan_control *sc)
763{
764 LIST_HEAD(ret_pages);
765 LIST_HEAD(free_pages);
766 int pgactivate = 0;
767 unsigned long nr_dirty = 0;
768 unsigned long nr_congested = 0;
769 unsigned long nr_reclaimed = 0;
770
771 cond_resched();
772
773 while (!list_empty(page_list)) {
774 enum page_references references;
775 struct address_space *mapping;
776 struct page *page;
777 int may_enter_fs;
778
779 cond_resched();
780
781 page = lru_to_page(page_list);
782 list_del(&page->lru);
783
784 if (!trylock_page(page))
785 goto keep;
786
787 VM_BUG_ON(PageActive(page));
788 VM_BUG_ON(page_zone(page) != zone);
789
790 sc->nr_scanned++;
791
792 if (unlikely(!page_evictable(page, NULL)))
793 goto cull_mlocked;
794
795 if (!sc->may_unmap && page_mapped(page))
796 goto keep_locked;
797
798
799 if (page_mapped(page) || PageSwapCache(page))
800 sc->nr_scanned++;
801
802 may_enter_fs = (sc->gfp_mask & __GFP_FS) ||
803 (PageSwapCache(page) && (sc->gfp_mask & __GFP_IO));
804
805 if (PageWriteback(page)) {
806
807
808
809
810
811
812
813
814 if ((sc->reclaim_mode & RECLAIM_MODE_SYNC) &&
815 may_enter_fs)
816 wait_on_page_writeback(page);
817 else {
818 unlock_page(page);
819 goto keep_lumpy;
820 }
821 }
822
823 references = page_check_references(page, sc);
824 switch (references) {
825 case PAGEREF_ACTIVATE:
826 goto activate_locked;
827 case PAGEREF_KEEP:
828 goto keep_locked;
829 case PAGEREF_RECLAIM:
830 case PAGEREF_RECLAIM_CLEAN:
831 ;
832 }
833
834
835
836
837
838 if (PageAnon(page) && !PageSwapCache(page)) {
839 if (!(sc->gfp_mask & __GFP_IO))
840 goto keep_locked;
841 if (!add_to_swap(page))
842 goto activate_locked;
843 may_enter_fs = 1;
844 }
845
846 mapping = page_mapping(page);
847
848
849
850
851
852 if (page_mapped(page) && mapping) {
853 switch (try_to_unmap(page, TTU_UNMAP)) {
854 case SWAP_FAIL:
855 goto activate_locked;
856 case SWAP_AGAIN:
857 goto keep_locked;
858 case SWAP_MLOCK:
859 goto cull_mlocked;
860 case SWAP_SUCCESS:
861 ;
862 }
863 }
864
865 if (PageDirty(page)) {
866 nr_dirty++;
867
868 if (references == PAGEREF_RECLAIM_CLEAN)
869 goto keep_locked;
870 if (!may_enter_fs)
871 goto keep_locked;
872 if (!sc->may_writepage)
873 goto keep_locked;
874
875
876 switch (pageout(page, mapping, sc)) {
877 case PAGE_KEEP:
878 nr_congested++;
879 goto keep_locked;
880 case PAGE_ACTIVATE:
881 goto activate_locked;
882 case PAGE_SUCCESS:
883 if (PageWriteback(page))
884 goto keep_lumpy;
885 if (PageDirty(page))
886 goto keep;
887
888
889
890
891
892 if (!trylock_page(page))
893 goto keep;
894 if (PageDirty(page) || PageWriteback(page))
895 goto keep_locked;
896 mapping = page_mapping(page);
897 case PAGE_CLEAN:
898 ;
899 }
900 }
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923 if (page_has_private(page)) {
924 if (!try_to_release_page(page, sc->gfp_mask))
925 goto activate_locked;
926 if (!mapping && page_count(page) == 1) {
927 unlock_page(page);
928 if (put_page_testzero(page))
929 goto free_it;
930 else {
931
932
933
934
935
936
937
938 nr_reclaimed++;
939 continue;
940 }
941 }
942 }
943
944 if (!mapping || !__remove_mapping(mapping, page))
945 goto keep_locked;
946
947
948
949
950
951
952
953
954 __clear_page_locked(page);
955free_it:
956 nr_reclaimed++;
957
958
959
960
961
962 list_add(&page->lru, &free_pages);
963 continue;
964
965cull_mlocked:
966 if (PageSwapCache(page))
967 try_to_free_swap(page);
968 unlock_page(page);
969 putback_lru_page(page);
970 reset_reclaim_mode(sc);
971 continue;
972
973activate_locked:
974
975 if (PageSwapCache(page) && vm_swap_full())
976 try_to_free_swap(page);
977 VM_BUG_ON(PageActive(page));
978 SetPageActive(page);
979 pgactivate++;
980keep_locked:
981 unlock_page(page);
982keep:
983 reset_reclaim_mode(sc);
984keep_lumpy:
985 list_add(&page->lru, &ret_pages);
986 VM_BUG_ON(PageLRU(page) || PageUnevictable(page));
987 }
988
989
990
991
992
993
994
995 if (nr_dirty && nr_dirty == nr_congested && scanning_global_lru(sc))
996 zone_set_flag(zone, ZONE_CONGESTED);
997
998 free_page_list(&free_pages);
999
1000 list_splice(&ret_pages, page_list);
1001 count_vm_events(PGACTIVATE, pgactivate);
1002 return nr_reclaimed;
1003}
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015int __isolate_lru_page(struct page *page, int mode, int file)
1016{
1017 int ret = -EINVAL;
1018
1019
1020 if (!PageLRU(page))
1021 return ret;
1022
1023
1024
1025
1026
1027
1028 if (mode != ISOLATE_BOTH && (!PageActive(page) != !mode))
1029 return ret;
1030
1031 if (mode != ISOLATE_BOTH && page_is_file_cache(page) != file)
1032 return ret;
1033
1034
1035
1036
1037
1038
1039 if (PageUnevictable(page))
1040 return ret;
1041
1042 ret = -EBUSY;
1043
1044 if (likely(get_page_unless_zero(page))) {
1045
1046
1047
1048
1049
1050 ClearPageLRU(page);
1051 ret = 0;
1052 }
1053
1054 return ret;
1055}
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
1078 struct list_head *src, struct list_head *dst,
1079 unsigned long *scanned, int order, int mode, int file)
1080{
1081 unsigned long nr_taken = 0;
1082 unsigned long nr_lumpy_taken = 0;
1083 unsigned long nr_lumpy_dirty = 0;
1084 unsigned long nr_lumpy_failed = 0;
1085 unsigned long scan;
1086
1087 for (scan = 0; scan < nr_to_scan && !list_empty(src); scan++) {
1088 struct page *page;
1089 unsigned long pfn;
1090 unsigned long end_pfn;
1091 unsigned long page_pfn;
1092 int zone_id;
1093
1094 page = lru_to_page(src);
1095 prefetchw_prev_lru_page(page, src, flags);
1096
1097 VM_BUG_ON(!PageLRU(page));
1098
1099 switch (__isolate_lru_page(page, mode, file)) {
1100 case 0:
1101 list_move(&page->lru, dst);
1102 mem_cgroup_del_lru(page);
1103 nr_taken += hpage_nr_pages(page);
1104 break;
1105
1106 case -EBUSY:
1107
1108 list_move(&page->lru, src);
1109 mem_cgroup_rotate_lru_list(page, page_lru(page));
1110 continue;
1111
1112 default:
1113 BUG();
1114 }
1115
1116 if (!order)
1117 continue;
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128 zone_id = page_zone_id(page);
1129 page_pfn = page_to_pfn(page);
1130 pfn = page_pfn & ~((1 << order) - 1);
1131 end_pfn = pfn + (1 << order);
1132 for (; pfn < end_pfn; pfn++) {
1133 struct page *cursor_page;
1134
1135
1136 if (unlikely(pfn == page_pfn))
1137 continue;
1138
1139
1140 if (unlikely(!pfn_valid_within(pfn)))
1141 break;
1142
1143 cursor_page = pfn_to_page(pfn);
1144
1145
1146 if (unlikely(page_zone_id(cursor_page) != zone_id))
1147 break;
1148
1149
1150
1151
1152
1153
1154 if (nr_swap_pages <= 0 && PageAnon(cursor_page) &&
1155 !PageSwapCache(cursor_page))
1156 break;
1157
1158 if (__isolate_lru_page(cursor_page, mode, file) == 0) {
1159 list_move(&cursor_page->lru, dst);
1160 mem_cgroup_del_lru(cursor_page);
1161 nr_taken += hpage_nr_pages(page);
1162 nr_lumpy_taken++;
1163 if (PageDirty(cursor_page))
1164 nr_lumpy_dirty++;
1165 scan++;
1166 } else {
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179 if (!PageTail(cursor_page) &&
1180 !atomic_read(&cursor_page->_count))
1181 continue;
1182 break;
1183 }
1184 }
1185
1186
1187 if (pfn < end_pfn)
1188 nr_lumpy_failed++;
1189 }
1190
1191 *scanned = scan;
1192
1193 trace_mm_vmscan_lru_isolate(order,
1194 nr_to_scan, scan,
1195 nr_taken,
1196 nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed,
1197 mode);
1198 return nr_taken;
1199}
1200
1201static unsigned long isolate_pages_global(unsigned long nr,
1202 struct list_head *dst,
1203 unsigned long *scanned, int order,
1204 int mode, struct zone *z,
1205 int active, int file)
1206{
1207 int lru = LRU_BASE;
1208 if (active)
1209 lru += LRU_ACTIVE;
1210 if (file)
1211 lru += LRU_FILE;
1212 return isolate_lru_pages(nr, &z->lru[lru].list, dst, scanned, order,
1213 mode, file);
1214}
1215
1216
1217
1218
1219
1220static unsigned long clear_active_flags(struct list_head *page_list,
1221 unsigned int *count)
1222{
1223 int nr_active = 0;
1224 int lru;
1225 struct page *page;
1226
1227 list_for_each_entry(page, page_list, lru) {
1228 int numpages = hpage_nr_pages(page);
1229 lru = page_lru_base_type(page);
1230 if (PageActive(page)) {
1231 lru += LRU_ACTIVE;
1232 ClearPageActive(page);
1233 nr_active += numpages;
1234 }
1235 if (count)
1236 count[lru] += numpages;
1237 }
1238
1239 return nr_active;
1240}
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267int isolate_lru_page(struct page *page)
1268{
1269 int ret = -EBUSY;
1270
1271 VM_BUG_ON(!page_count(page));
1272
1273 if (PageLRU(page)) {
1274 struct zone *zone = page_zone(page);
1275
1276 spin_lock_irq(&zone->lru_lock);
1277 if (PageLRU(page)) {
1278 int lru = page_lru(page);
1279 ret = 0;
1280 get_page(page);
1281 ClearPageLRU(page);
1282
1283 del_page_from_lru_list(zone, page, lru);
1284 }
1285 spin_unlock_irq(&zone->lru_lock);
1286 }
1287 return ret;
1288}
1289
1290
1291
1292
1293static int too_many_isolated(struct zone *zone, int file,
1294 struct scan_control *sc)
1295{
1296 unsigned long inactive, isolated;
1297
1298 if (current_is_kswapd())
1299 return 0;
1300
1301 if (!scanning_global_lru(sc))
1302 return 0;
1303
1304 if (file) {
1305 inactive = zone_page_state(zone, NR_INACTIVE_FILE);
1306 isolated = zone_page_state(zone, NR_ISOLATED_FILE);
1307 } else {
1308 inactive = zone_page_state(zone, NR_INACTIVE_ANON);
1309 isolated = zone_page_state(zone, NR_ISOLATED_ANON);
1310 }
1311
1312 return isolated > inactive;
1313}
1314
1315
1316
1317
1318static noinline_for_stack void
1319putback_lru_pages(struct zone *zone, struct scan_control *sc,
1320 unsigned long nr_anon, unsigned long nr_file,
1321 struct list_head *page_list)
1322{
1323 struct page *page;
1324 struct pagevec pvec;
1325 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1326
1327 pagevec_init(&pvec, 1);
1328
1329
1330
1331
1332 spin_lock(&zone->lru_lock);
1333 while (!list_empty(page_list)) {
1334 int lru;
1335 page = lru_to_page(page_list);
1336 VM_BUG_ON(PageLRU(page));
1337 list_del(&page->lru);
1338 if (unlikely(!page_evictable(page, NULL))) {
1339 spin_unlock_irq(&zone->lru_lock);
1340 putback_lru_page(page);
1341 spin_lock_irq(&zone->lru_lock);
1342 continue;
1343 }
1344 SetPageLRU(page);
1345 lru = page_lru(page);
1346 add_page_to_lru_list(zone, page, lru);
1347 if (is_active_lru(lru)) {
1348 int file = is_file_lru(lru);
1349 int numpages = hpage_nr_pages(page);
1350 reclaim_stat->recent_rotated[file] += numpages;
1351 }
1352 if (!pagevec_add(&pvec, page)) {
1353 spin_unlock_irq(&zone->lru_lock);
1354 __pagevec_release(&pvec);
1355 spin_lock_irq(&zone->lru_lock);
1356 }
1357 }
1358 __mod_zone_page_state(zone, NR_ISOLATED_ANON, -nr_anon);
1359 __mod_zone_page_state(zone, NR_ISOLATED_FILE, -nr_file);
1360
1361 spin_unlock_irq(&zone->lru_lock);
1362 pagevec_release(&pvec);
1363}
1364
1365static noinline_for_stack void update_isolated_counts(struct zone *zone,
1366 struct scan_control *sc,
1367 unsigned long *nr_anon,
1368 unsigned long *nr_file,
1369 struct list_head *isolated_list)
1370{
1371 unsigned long nr_active;
1372 unsigned int count[NR_LRU_LISTS] = { 0, };
1373 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1374
1375 nr_active = clear_active_flags(isolated_list, count);
1376 __count_vm_events(PGDEACTIVATE, nr_active);
1377
1378 __mod_zone_page_state(zone, NR_ACTIVE_FILE,
1379 -count[LRU_ACTIVE_FILE]);
1380 __mod_zone_page_state(zone, NR_INACTIVE_FILE,
1381 -count[LRU_INACTIVE_FILE]);
1382 __mod_zone_page_state(zone, NR_ACTIVE_ANON,
1383 -count[LRU_ACTIVE_ANON]);
1384 __mod_zone_page_state(zone, NR_INACTIVE_ANON,
1385 -count[LRU_INACTIVE_ANON]);
1386
1387 *nr_anon = count[LRU_ACTIVE_ANON] + count[LRU_INACTIVE_ANON];
1388 *nr_file = count[LRU_ACTIVE_FILE] + count[LRU_INACTIVE_FILE];
1389 __mod_zone_page_state(zone, NR_ISOLATED_ANON, *nr_anon);
1390 __mod_zone_page_state(zone, NR_ISOLATED_FILE, *nr_file);
1391
1392 reclaim_stat->recent_scanned[0] += *nr_anon;
1393 reclaim_stat->recent_scanned[1] += *nr_file;
1394}
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404static inline bool should_reclaim_stall(unsigned long nr_taken,
1405 unsigned long nr_freed,
1406 int priority,
1407 struct scan_control *sc)
1408{
1409 int lumpy_stall_priority;
1410
1411
1412 if (current_is_kswapd())
1413 return false;
1414
1415
1416 if (sc->reclaim_mode & RECLAIM_MODE_SINGLE)
1417 return false;
1418
1419
1420 if (nr_freed == nr_taken)
1421 return false;
1422
1423
1424
1425
1426
1427
1428
1429 if (sc->order > PAGE_ALLOC_COSTLY_ORDER)
1430 lumpy_stall_priority = DEF_PRIORITY;
1431 else
1432 lumpy_stall_priority = DEF_PRIORITY / 3;
1433
1434 return priority <= lumpy_stall_priority;
1435}
1436
1437
1438
1439
1440
1441static noinline_for_stack unsigned long
1442shrink_inactive_list(unsigned long nr_to_scan, struct zone *zone,
1443 struct scan_control *sc, int priority, int file)
1444{
1445 LIST_HEAD(page_list);
1446 unsigned long nr_scanned;
1447 unsigned long nr_reclaimed = 0;
1448 unsigned long nr_taken;
1449 unsigned long nr_anon;
1450 unsigned long nr_file;
1451
1452 while (unlikely(too_many_isolated(zone, file, sc))) {
1453 congestion_wait(BLK_RW_ASYNC, HZ/10);
1454
1455
1456 if (fatal_signal_pending(current))
1457 return SWAP_CLUSTER_MAX;
1458 }
1459
1460 set_reclaim_mode(priority, sc, false);
1461 lru_add_drain();
1462 spin_lock_irq(&zone->lru_lock);
1463
1464 if (scanning_global_lru(sc)) {
1465 nr_taken = isolate_pages_global(nr_to_scan,
1466 &page_list, &nr_scanned, sc->order,
1467 sc->reclaim_mode & RECLAIM_MODE_LUMPYRECLAIM ?
1468 ISOLATE_BOTH : ISOLATE_INACTIVE,
1469 zone, 0, file);
1470 zone->pages_scanned += nr_scanned;
1471 if (current_is_kswapd())
1472 __count_zone_vm_events(PGSCAN_KSWAPD, zone,
1473 nr_scanned);
1474 else
1475 __count_zone_vm_events(PGSCAN_DIRECT, zone,
1476 nr_scanned);
1477 } else {
1478 nr_taken = mem_cgroup_isolate_pages(nr_to_scan,
1479 &page_list, &nr_scanned, sc->order,
1480 sc->reclaim_mode & RECLAIM_MODE_LUMPYRECLAIM ?
1481 ISOLATE_BOTH : ISOLATE_INACTIVE,
1482 zone, sc->mem_cgroup,
1483 0, file);
1484
1485
1486
1487
1488 }
1489
1490 if (nr_taken == 0) {
1491 spin_unlock_irq(&zone->lru_lock);
1492 return 0;
1493 }
1494
1495 update_isolated_counts(zone, sc, &nr_anon, &nr_file, &page_list);
1496
1497 spin_unlock_irq(&zone->lru_lock);
1498
1499 nr_reclaimed = shrink_page_list(&page_list, zone, sc);
1500
1501
1502 if (should_reclaim_stall(nr_taken, nr_reclaimed, priority, sc)) {
1503 set_reclaim_mode(priority, sc, true);
1504 nr_reclaimed += shrink_page_list(&page_list, zone, sc);
1505 }
1506
1507 local_irq_disable();
1508 if (current_is_kswapd())
1509 __count_vm_events(KSWAPD_STEAL, nr_reclaimed);
1510 __count_zone_vm_events(PGSTEAL, zone, nr_reclaimed);
1511
1512 putback_lru_pages(zone, sc, nr_anon, nr_file, &page_list);
1513
1514 trace_mm_vmscan_lru_shrink_inactive(zone->zone_pgdat->node_id,
1515 zone_idx(zone),
1516 nr_scanned, nr_reclaimed,
1517 priority,
1518 trace_shrink_flags(file, sc->reclaim_mode));
1519 return nr_reclaimed;
1520}
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540static void move_active_pages_to_lru(struct zone *zone,
1541 struct list_head *list,
1542 enum lru_list lru)
1543{
1544 unsigned long pgmoved = 0;
1545 struct pagevec pvec;
1546 struct page *page;
1547
1548 pagevec_init(&pvec, 1);
1549
1550 while (!list_empty(list)) {
1551 page = lru_to_page(list);
1552
1553 VM_BUG_ON(PageLRU(page));
1554 SetPageLRU(page);
1555
1556 list_move(&page->lru, &zone->lru[lru].list);
1557 mem_cgroup_add_lru_list(page, lru);
1558 pgmoved += hpage_nr_pages(page);
1559
1560 if (!pagevec_add(&pvec, page) || list_empty(list)) {
1561 spin_unlock_irq(&zone->lru_lock);
1562 if (buffer_heads_over_limit)
1563 pagevec_strip(&pvec);
1564 __pagevec_release(&pvec);
1565 spin_lock_irq(&zone->lru_lock);
1566 }
1567 }
1568 __mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
1569 if (!is_active_lru(lru))
1570 __count_vm_events(PGDEACTIVATE, pgmoved);
1571}
1572
1573static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
1574 struct scan_control *sc, int priority, int file)
1575{
1576 unsigned long nr_taken;
1577 unsigned long pgscanned;
1578 unsigned long vm_flags;
1579 LIST_HEAD(l_hold);
1580 LIST_HEAD(l_active);
1581 LIST_HEAD(l_inactive);
1582 struct page *page;
1583 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1584 unsigned long nr_rotated = 0;
1585
1586 lru_add_drain();
1587 spin_lock_irq(&zone->lru_lock);
1588 if (scanning_global_lru(sc)) {
1589 nr_taken = isolate_pages_global(nr_pages, &l_hold,
1590 &pgscanned, sc->order,
1591 ISOLATE_ACTIVE, zone,
1592 1, file);
1593 zone->pages_scanned += pgscanned;
1594 } else {
1595 nr_taken = mem_cgroup_isolate_pages(nr_pages, &l_hold,
1596 &pgscanned, sc->order,
1597 ISOLATE_ACTIVE, zone,
1598 sc->mem_cgroup, 1, file);
1599
1600
1601
1602
1603 }
1604
1605 reclaim_stat->recent_scanned[file] += nr_taken;
1606
1607 __count_zone_vm_events(PGREFILL, zone, pgscanned);
1608 if (file)
1609 __mod_zone_page_state(zone, NR_ACTIVE_FILE, -nr_taken);
1610 else
1611 __mod_zone_page_state(zone, NR_ACTIVE_ANON, -nr_taken);
1612 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
1613 spin_unlock_irq(&zone->lru_lock);
1614
1615 while (!list_empty(&l_hold)) {
1616 cond_resched();
1617 page = lru_to_page(&l_hold);
1618 list_del(&page->lru);
1619
1620 if (unlikely(!page_evictable(page, NULL))) {
1621 putback_lru_page(page);
1622 continue;
1623 }
1624
1625 if (page_referenced(page, 0, sc->mem_cgroup, &vm_flags)) {
1626 nr_rotated += hpage_nr_pages(page);
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636 if ((vm_flags & VM_EXEC) && page_is_file_cache(page)) {
1637 list_add(&page->lru, &l_active);
1638 continue;
1639 }
1640 }
1641
1642 ClearPageActive(page);
1643 list_add(&page->lru, &l_inactive);
1644 }
1645
1646
1647
1648
1649 spin_lock_irq(&zone->lru_lock);
1650
1651
1652
1653
1654
1655
1656 reclaim_stat->recent_rotated[file] += nr_rotated;
1657
1658 move_active_pages_to_lru(zone, &l_active,
1659 LRU_ACTIVE + file * LRU_FILE);
1660 move_active_pages_to_lru(zone, &l_inactive,
1661 LRU_BASE + file * LRU_FILE);
1662 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, -nr_taken);
1663 spin_unlock_irq(&zone->lru_lock);
1664}
1665
1666#ifdef CONFIG_SWAP
1667static int inactive_anon_is_low_global(struct zone *zone)
1668{
1669 unsigned long active, inactive;
1670
1671 active = zone_page_state(zone, NR_ACTIVE_ANON);
1672 inactive = zone_page_state(zone, NR_INACTIVE_ANON);
1673
1674 if (inactive * zone->inactive_ratio < active)
1675 return 1;
1676
1677 return 0;
1678}
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688static int inactive_anon_is_low(struct zone *zone, struct scan_control *sc)
1689{
1690 int low;
1691
1692
1693
1694
1695
1696 if (!total_swap_pages)
1697 return 0;
1698
1699 if (scanning_global_lru(sc))
1700 low = inactive_anon_is_low_global(zone);
1701 else
1702 low = mem_cgroup_inactive_anon_is_low(sc->mem_cgroup);
1703 return low;
1704}
1705#else
1706static inline int inactive_anon_is_low(struct zone *zone,
1707 struct scan_control *sc)
1708{
1709 return 0;
1710}
1711#endif
1712
1713static int inactive_file_is_low_global(struct zone *zone)
1714{
1715 unsigned long active, inactive;
1716
1717 active = zone_page_state(zone, NR_ACTIVE_FILE);
1718 inactive = zone_page_state(zone, NR_INACTIVE_FILE);
1719
1720 return (active > inactive);
1721}
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738static int inactive_file_is_low(struct zone *zone, struct scan_control *sc)
1739{
1740 int low;
1741
1742 if (scanning_global_lru(sc))
1743 low = inactive_file_is_low_global(zone);
1744 else
1745 low = mem_cgroup_inactive_file_is_low(sc->mem_cgroup);
1746 return low;
1747}
1748
1749static int inactive_list_is_low(struct zone *zone, struct scan_control *sc,
1750 int file)
1751{
1752 if (file)
1753 return inactive_file_is_low(zone, sc);
1754 else
1755 return inactive_anon_is_low(zone, sc);
1756}
1757
1758static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
1759 struct zone *zone, struct scan_control *sc, int priority)
1760{
1761 int file = is_file_lru(lru);
1762
1763 if (is_active_lru(lru)) {
1764 if (inactive_list_is_low(zone, sc, file))
1765 shrink_active_list(nr_to_scan, zone, sc, priority, file);
1766 return 0;
1767 }
1768
1769 return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
1770}
1771
1772static int vmscan_swappiness(struct scan_control *sc)
1773{
1774 if (scanning_global_lru(sc))
1775 return vm_swappiness;
1776 return mem_cgroup_swappiness(sc->mem_cgroup);
1777}
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787static void get_scan_count(struct zone *zone, struct scan_control *sc,
1788 unsigned long *nr, int priority)
1789{
1790 unsigned long anon, file, free;
1791 unsigned long anon_prio, file_prio;
1792 unsigned long ap, fp;
1793 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1794 u64 fraction[2], denominator;
1795 enum lru_list l;
1796 int noswap = 0;
1797 bool force_scan = false;
1798 unsigned long nr_force_scan[2];
1799
1800
1801 if (scanning_global_lru(sc) && current_is_kswapd())
1802 force_scan = true;
1803
1804 if (!scanning_global_lru(sc))
1805 force_scan = true;
1806
1807
1808 if (!sc->may_swap || (nr_swap_pages <= 0)) {
1809 noswap = 1;
1810 fraction[0] = 0;
1811 fraction[1] = 1;
1812 denominator = 1;
1813 nr_force_scan[0] = 0;
1814 nr_force_scan[1] = SWAP_CLUSTER_MAX;
1815 goto out;
1816 }
1817
1818 anon = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_ANON) +
1819 zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON);
1820 file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) +
1821 zone_nr_lru_pages(zone, sc, LRU_INACTIVE_FILE);
1822
1823 if (scanning_global_lru(sc)) {
1824 free = zone_page_state(zone, NR_FREE_PAGES);
1825
1826
1827 if (unlikely(file + free <= high_wmark_pages(zone))) {
1828 fraction[0] = 1;
1829 fraction[1] = 0;
1830 denominator = 1;
1831 nr_force_scan[0] = SWAP_CLUSTER_MAX;
1832 nr_force_scan[1] = 0;
1833 goto out;
1834 }
1835 }
1836
1837
1838
1839
1840
1841 anon_prio = vmscan_swappiness(sc);
1842 file_prio = 200 - vmscan_swappiness(sc);
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855 spin_lock_irq(&zone->lru_lock);
1856 if (unlikely(reclaim_stat->recent_scanned[0] > anon / 4)) {
1857 reclaim_stat->recent_scanned[0] /= 2;
1858 reclaim_stat->recent_rotated[0] /= 2;
1859 }
1860
1861 if (unlikely(reclaim_stat->recent_scanned[1] > file / 4)) {
1862 reclaim_stat->recent_scanned[1] /= 2;
1863 reclaim_stat->recent_rotated[1] /= 2;
1864 }
1865
1866
1867
1868
1869
1870
1871 ap = (anon_prio + 1) * (reclaim_stat->recent_scanned[0] + 1);
1872 ap /= reclaim_stat->recent_rotated[0] + 1;
1873
1874 fp = (file_prio + 1) * (reclaim_stat->recent_scanned[1] + 1);
1875 fp /= reclaim_stat->recent_rotated[1] + 1;
1876 spin_unlock_irq(&zone->lru_lock);
1877
1878 fraction[0] = ap;
1879 fraction[1] = fp;
1880 denominator = ap + fp + 1;
1881 if (force_scan) {
1882 unsigned long scan = SWAP_CLUSTER_MAX;
1883 nr_force_scan[0] = div64_u64(scan * ap, denominator);
1884 nr_force_scan[1] = div64_u64(scan * fp, denominator);
1885 }
1886out:
1887 for_each_evictable_lru(l) {
1888 int file = is_file_lru(l);
1889 unsigned long scan;
1890
1891 scan = zone_nr_lru_pages(zone, sc, l);
1892 if (priority || noswap) {
1893 scan >>= priority;
1894 scan = div64_u64(scan * fraction[file], denominator);
1895 }
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906 if (!scan && force_scan)
1907 scan = nr_force_scan[file];
1908 nr[l] = scan;
1909 }
1910}
1911
1912
1913
1914
1915
1916
1917
1918
1919static inline bool should_continue_reclaim(struct zone *zone,
1920 unsigned long nr_reclaimed,
1921 unsigned long nr_scanned,
1922 struct scan_control *sc)
1923{
1924 unsigned long pages_for_compaction;
1925 unsigned long inactive_lru_pages;
1926
1927
1928 if (!(sc->reclaim_mode & RECLAIM_MODE_COMPACTION))
1929 return false;
1930
1931
1932 if (sc->gfp_mask & __GFP_REPEAT) {
1933
1934
1935
1936
1937
1938
1939 if (!nr_reclaimed && !nr_scanned)
1940 return false;
1941 } else {
1942
1943
1944
1945
1946
1947
1948
1949
1950 if (!nr_reclaimed)
1951 return false;
1952 }
1953
1954
1955
1956
1957
1958 pages_for_compaction = (2UL << sc->order);
1959 inactive_lru_pages = zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON) +
1960 zone_nr_lru_pages(zone, sc, LRU_INACTIVE_FILE);
1961 if (sc->nr_reclaimed < pages_for_compaction &&
1962 inactive_lru_pages > pages_for_compaction)
1963 return true;
1964
1965
1966 switch (compaction_suitable(zone, sc->order)) {
1967 case COMPACT_PARTIAL:
1968 case COMPACT_CONTINUE:
1969 return false;
1970 default:
1971 return true;
1972 }
1973}
1974
1975
1976
1977
1978static void shrink_zone(int priority, struct zone *zone,
1979 struct scan_control *sc)
1980{
1981 unsigned long nr[NR_LRU_LISTS];
1982 unsigned long nr_to_scan;
1983 enum lru_list l;
1984 unsigned long nr_reclaimed, nr_scanned;
1985 unsigned long nr_to_reclaim = sc->nr_to_reclaim;
1986
1987restart:
1988 nr_reclaimed = 0;
1989 nr_scanned = sc->nr_scanned;
1990 get_scan_count(zone, sc, nr, priority);
1991
1992 while (nr[LRU_INACTIVE_ANON] || nr[LRU_ACTIVE_FILE] ||
1993 nr[LRU_INACTIVE_FILE]) {
1994 for_each_evictable_lru(l) {
1995 if (nr[l]) {
1996 nr_to_scan = min_t(unsigned long,
1997 nr[l], SWAP_CLUSTER_MAX);
1998 nr[l] -= nr_to_scan;
1999
2000 nr_reclaimed += shrink_list(l, nr_to_scan,
2001 zone, sc, priority);
2002 }
2003 }
2004
2005
2006
2007
2008
2009
2010
2011
2012 if (nr_reclaimed >= nr_to_reclaim && priority < DEF_PRIORITY)
2013 break;
2014 }
2015 sc->nr_reclaimed += nr_reclaimed;
2016
2017
2018
2019
2020
2021 if (inactive_anon_is_low(zone, sc))
2022 shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
2023
2024
2025 if (should_continue_reclaim(zone, nr_reclaimed,
2026 sc->nr_scanned - nr_scanned, sc))
2027 goto restart;
2028
2029 throttle_vm_writeout(sc->gfp_mask);
2030}
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048static void shrink_zones(int priority, struct zonelist *zonelist,
2049 struct scan_control *sc)
2050{
2051 struct zoneref *z;
2052 struct zone *zone;
2053 unsigned long nr_soft_reclaimed;
2054 unsigned long nr_soft_scanned;
2055
2056 for_each_zone_zonelist_nodemask(zone, z, zonelist,
2057 gfp_zone(sc->gfp_mask), sc->nodemask) {
2058 if (!populated_zone(zone))
2059 continue;
2060
2061
2062
2063
2064 if (scanning_global_lru(sc)) {
2065 if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
2066 continue;
2067 if (zone->all_unreclaimable && priority != DEF_PRIORITY)
2068 continue;
2069
2070
2071
2072
2073
2074
2075 nr_soft_scanned = 0;
2076 nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(zone,
2077 sc->order, sc->gfp_mask,
2078 &nr_soft_scanned);
2079 sc->nr_reclaimed += nr_soft_reclaimed;
2080 sc->nr_scanned += nr_soft_scanned;
2081
2082 }
2083
2084 shrink_zone(priority, zone, sc);
2085 }
2086}
2087
2088static bool zone_reclaimable(struct zone *zone)
2089{
2090 return zone->pages_scanned < zone_reclaimable_pages(zone) * 6;
2091}
2092
2093
2094static bool all_unreclaimable(struct zonelist *zonelist,
2095 struct scan_control *sc)
2096{
2097 struct zoneref *z;
2098 struct zone *zone;
2099
2100 for_each_zone_zonelist_nodemask(zone, z, zonelist,
2101 gfp_zone(sc->gfp_mask), sc->nodemask) {
2102 if (!populated_zone(zone))
2103 continue;
2104 if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
2105 continue;
2106 if (!zone->all_unreclaimable)
2107 return false;
2108 }
2109
2110 return true;
2111}
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
2130 struct scan_control *sc,
2131 struct shrink_control *shrink)
2132{
2133 int priority;
2134 unsigned long total_scanned = 0;
2135 struct reclaim_state *reclaim_state = current->reclaim_state;
2136 struct zoneref *z;
2137 struct zone *zone;
2138 unsigned long writeback_threshold;
2139
2140 get_mems_allowed();
2141 delayacct_freepages_start();
2142
2143 if (scanning_global_lru(sc))
2144 count_vm_event(ALLOCSTALL);
2145
2146 for (priority = DEF_PRIORITY; priority >= 0; priority--) {
2147 sc->nr_scanned = 0;
2148 if (!priority)
2149 disable_swap_token(sc->mem_cgroup);
2150 shrink_zones(priority, zonelist, sc);
2151
2152
2153
2154
2155 if (scanning_global_lru(sc)) {
2156 unsigned long lru_pages = 0;
2157 for_each_zone_zonelist(zone, z, zonelist,
2158 gfp_zone(sc->gfp_mask)) {
2159 if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
2160 continue;
2161
2162 lru_pages += zone_reclaimable_pages(zone);
2163 }
2164
2165 shrink_slab(shrink, sc->nr_scanned, lru_pages);
2166 if (reclaim_state) {
2167 sc->nr_reclaimed += reclaim_state->reclaimed_slab;
2168 reclaim_state->reclaimed_slab = 0;
2169 }
2170 }
2171 total_scanned += sc->nr_scanned;
2172 if (sc->nr_reclaimed >= sc->nr_to_reclaim)
2173 goto out;
2174
2175
2176
2177
2178
2179
2180
2181
2182 writeback_threshold = sc->nr_to_reclaim + sc->nr_to_reclaim / 2;
2183 if (total_scanned > writeback_threshold) {
2184 wakeup_flusher_threads(laptop_mode ? 0 : total_scanned);
2185 sc->may_writepage = 1;
2186 }
2187
2188
2189 if (!sc->hibernation_mode && sc->nr_scanned &&
2190 priority < DEF_PRIORITY - 2) {
2191 struct zone *preferred_zone;
2192
2193 first_zones_zonelist(zonelist, gfp_zone(sc->gfp_mask),
2194 &cpuset_current_mems_allowed,
2195 &preferred_zone);
2196 wait_iff_congested(preferred_zone, BLK_RW_ASYNC, HZ/10);
2197 }
2198 }
2199
2200out:
2201 delayacct_freepages_end();
2202 put_mems_allowed();
2203
2204 if (sc->nr_reclaimed)
2205 return sc->nr_reclaimed;
2206
2207
2208
2209
2210
2211
2212 if (oom_killer_disabled)
2213 return 0;
2214
2215
2216 if (scanning_global_lru(sc) && !all_unreclaimable(zonelist, sc))
2217 return 1;
2218
2219 return 0;
2220}
2221
2222unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
2223 gfp_t gfp_mask, nodemask_t *nodemask)
2224{
2225 unsigned long nr_reclaimed;
2226 struct scan_control sc = {
2227 .gfp_mask = gfp_mask,
2228 .may_writepage = !laptop_mode,
2229 .nr_to_reclaim = SWAP_CLUSTER_MAX,
2230 .may_unmap = 1,
2231 .may_swap = 1,
2232 .order = order,
2233 .mem_cgroup = NULL,
2234 .nodemask = nodemask,
2235 };
2236 struct shrink_control shrink = {
2237 .gfp_mask = sc.gfp_mask,
2238 };
2239
2240 trace_mm_vmscan_direct_reclaim_begin(order,
2241 sc.may_writepage,
2242 gfp_mask);
2243
2244 nr_reclaimed = do_try_to_free_pages(zonelist, &sc, &shrink);
2245
2246 trace_mm_vmscan_direct_reclaim_end(nr_reclaimed);
2247
2248 return nr_reclaimed;
2249}
2250
2251#ifdef CONFIG_CGROUP_MEM_RES_CTLR
2252
2253unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
2254 gfp_t gfp_mask, bool noswap,
2255 struct zone *zone,
2256 unsigned long *nr_scanned)
2257{
2258 struct scan_control sc = {
2259 .nr_scanned = 0,
2260 .nr_to_reclaim = SWAP_CLUSTER_MAX,
2261 .may_writepage = !laptop_mode,
2262 .may_unmap = 1,
2263 .may_swap = !noswap,
2264 .order = 0,
2265 .mem_cgroup = mem,
2266 };
2267
2268 sc.gfp_mask = (gfp_mask & GFP_RECLAIM_MASK) |
2269 (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK);
2270
2271 trace_mm_vmscan_memcg_softlimit_reclaim_begin(0,
2272 sc.may_writepage,
2273 sc.gfp_mask);
2274
2275
2276
2277
2278
2279
2280
2281
2282 shrink_zone(0, zone, &sc);
2283
2284 trace_mm_vmscan_memcg_softlimit_reclaim_end(sc.nr_reclaimed);
2285
2286 *nr_scanned = sc.nr_scanned;
2287 return sc.nr_reclaimed;
2288}
2289
2290unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
2291 gfp_t gfp_mask,
2292 bool noswap)
2293{
2294 struct zonelist *zonelist;
2295 unsigned long nr_reclaimed;
2296 int nid;
2297 struct scan_control sc = {
2298 .may_writepage = !laptop_mode,
2299 .may_unmap = 1,
2300 .may_swap = !noswap,
2301 .nr_to_reclaim = SWAP_CLUSTER_MAX,
2302 .order = 0,
2303 .mem_cgroup = mem_cont,
2304 .nodemask = NULL,
2305 .gfp_mask = (gfp_mask & GFP_RECLAIM_MASK) |
2306 (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK),
2307 };
2308 struct shrink_control shrink = {
2309 .gfp_mask = sc.gfp_mask,
2310 };
2311
2312
2313
2314
2315
2316
2317 nid = mem_cgroup_select_victim_node(mem_cont);
2318
2319 zonelist = NODE_DATA(nid)->node_zonelists;
2320
2321 trace_mm_vmscan_memcg_reclaim_begin(0,
2322 sc.may_writepage,
2323 sc.gfp_mask);
2324
2325 nr_reclaimed = do_try_to_free_pages(zonelist, &sc, &shrink);
2326
2327 trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed);
2328
2329 return nr_reclaimed;
2330}
2331#endif
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349static bool pgdat_balanced(pg_data_t *pgdat, unsigned long balanced_pages,
2350 int classzone_idx)
2351{
2352 unsigned long present_pages = 0;
2353 int i;
2354
2355 for (i = 0; i <= classzone_idx; i++)
2356 present_pages += pgdat->node_zones[i].present_pages;
2357
2358
2359 return balanced_pages >= (present_pages >> 2);
2360}
2361
2362
2363static bool sleeping_prematurely(pg_data_t *pgdat, int order, long remaining,
2364 int classzone_idx)
2365{
2366 int i;
2367 unsigned long balanced = 0;
2368 bool all_zones_ok = true;
2369
2370
2371 if (remaining)
2372 return true;
2373
2374
2375 for (i = 0; i <= classzone_idx; i++) {
2376 struct zone *zone = pgdat->node_zones + i;
2377
2378 if (!populated_zone(zone))
2379 continue;
2380
2381
2382
2383
2384
2385
2386
2387 if (zone->all_unreclaimable) {
2388 balanced += zone->present_pages;
2389 continue;
2390 }
2391
2392 if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone),
2393 i, 0))
2394 all_zones_ok = false;
2395 else
2396 balanced += zone->present_pages;
2397 }
2398
2399
2400
2401
2402
2403
2404 if (order)
2405 return !pgdat_balanced(pgdat, balanced, classzone_idx);
2406 else
2407 return !all_zones_ok;
2408}
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
2432 int *classzone_idx)
2433{
2434 int all_zones_ok;
2435 unsigned long balanced;
2436 int priority;
2437 int i;
2438 int end_zone = 0;
2439 unsigned long total_scanned;
2440 struct reclaim_state *reclaim_state = current->reclaim_state;
2441 unsigned long nr_soft_reclaimed;
2442 unsigned long nr_soft_scanned;
2443 struct scan_control sc = {
2444 .gfp_mask = GFP_KERNEL,
2445 .may_unmap = 1,
2446 .may_swap = 1,
2447
2448
2449
2450
2451 .nr_to_reclaim = ULONG_MAX,
2452 .order = order,
2453 .mem_cgroup = NULL,
2454 };
2455 struct shrink_control shrink = {
2456 .gfp_mask = sc.gfp_mask,
2457 };
2458loop_again:
2459 total_scanned = 0;
2460 sc.nr_reclaimed = 0;
2461 sc.may_writepage = !laptop_mode;
2462 count_vm_event(PAGEOUTRUN);
2463
2464 for (priority = DEF_PRIORITY; priority >= 0; priority--) {
2465 unsigned long lru_pages = 0;
2466 int has_under_min_watermark_zone = 0;
2467
2468
2469 if (!priority)
2470 disable_swap_token(NULL);
2471
2472 all_zones_ok = 1;
2473 balanced = 0;
2474
2475
2476
2477
2478
2479 for (i = pgdat->nr_zones - 1; i >= 0; i--) {
2480 struct zone *zone = pgdat->node_zones + i;
2481
2482 if (!populated_zone(zone))
2483 continue;
2484
2485 if (zone->all_unreclaimable && priority != DEF_PRIORITY)
2486 continue;
2487
2488
2489
2490
2491
2492 if (inactive_anon_is_low(zone, &sc))
2493 shrink_active_list(SWAP_CLUSTER_MAX, zone,
2494 &sc, priority, 0);
2495
2496 if (!zone_watermark_ok_safe(zone, order,
2497 high_wmark_pages(zone), 0, 0)) {
2498 end_zone = i;
2499 break;
2500 } else {
2501
2502 zone_clear_flag(zone, ZONE_CONGESTED);
2503 }
2504 }
2505 if (i < 0)
2506 goto out;
2507
2508 for (i = 0; i <= end_zone; i++) {
2509 struct zone *zone = pgdat->node_zones + i;
2510
2511 lru_pages += zone_reclaimable_pages(zone);
2512 }
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523 for (i = 0; i <= end_zone; i++) {
2524 struct zone *zone = pgdat->node_zones + i;
2525 int nr_slab;
2526 unsigned long balance_gap;
2527
2528 if (!populated_zone(zone))
2529 continue;
2530
2531 if (zone->all_unreclaimable && priority != DEF_PRIORITY)
2532 continue;
2533
2534 sc.nr_scanned = 0;
2535
2536 nr_soft_scanned = 0;
2537
2538
2539
2540 nr_soft_reclaimed = mem_cgroup_soft_limit_reclaim(zone,
2541 order, sc.gfp_mask,
2542 &nr_soft_scanned);
2543 sc.nr_reclaimed += nr_soft_reclaimed;
2544 total_scanned += nr_soft_scanned;
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554 balance_gap = min(low_wmark_pages(zone),
2555 (zone->present_pages +
2556 KSWAPD_ZONE_BALANCE_GAP_RATIO-1) /
2557 KSWAPD_ZONE_BALANCE_GAP_RATIO);
2558 if (!zone_watermark_ok_safe(zone, order,
2559 high_wmark_pages(zone) + balance_gap,
2560 end_zone, 0)) {
2561 shrink_zone(priority, zone, &sc);
2562
2563 reclaim_state->reclaimed_slab = 0;
2564 nr_slab = shrink_slab(&shrink, sc.nr_scanned, lru_pages);
2565 sc.nr_reclaimed += reclaim_state->reclaimed_slab;
2566 total_scanned += sc.nr_scanned;
2567
2568 if (nr_slab == 0 && !zone_reclaimable(zone))
2569 zone->all_unreclaimable = 1;
2570 }
2571
2572
2573
2574
2575
2576
2577 if (total_scanned > SWAP_CLUSTER_MAX * 2 &&
2578 total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2)
2579 sc.may_writepage = 1;
2580
2581 if (zone->all_unreclaimable) {
2582 if (end_zone && end_zone == i)
2583 end_zone--;
2584 continue;
2585 }
2586
2587 if (!zone_watermark_ok_safe(zone, order,
2588 high_wmark_pages(zone), end_zone, 0)) {
2589 all_zones_ok = 0;
2590
2591
2592
2593
2594
2595 if (!zone_watermark_ok_safe(zone, order,
2596 min_wmark_pages(zone), end_zone, 0))
2597 has_under_min_watermark_zone = 1;
2598 } else {
2599
2600
2601
2602
2603
2604
2605
2606 zone_clear_flag(zone, ZONE_CONGESTED);
2607 if (i <= *classzone_idx)
2608 balanced += zone->present_pages;
2609 }
2610
2611 }
2612 if (all_zones_ok || (order && pgdat_balanced(pgdat, balanced, *classzone_idx)))
2613 break;
2614
2615
2616
2617
2618 if (total_scanned && (priority < DEF_PRIORITY - 2)) {
2619 if (has_under_min_watermark_zone)
2620 count_vm_event(KSWAPD_SKIP_CONGESTION_WAIT);
2621 else
2622 congestion_wait(BLK_RW_ASYNC, HZ/10);
2623 }
2624
2625
2626
2627
2628
2629
2630
2631 if (sc.nr_reclaimed >= SWAP_CLUSTER_MAX)
2632 break;
2633 }
2634out:
2635
2636
2637
2638
2639
2640
2641 if (!(all_zones_ok || (order && pgdat_balanced(pgdat, balanced, *classzone_idx)))) {
2642 cond_resched();
2643
2644 try_to_freeze();
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660 if (sc.nr_reclaimed < SWAP_CLUSTER_MAX)
2661 order = sc.order = 0;
2662
2663 goto loop_again;
2664 }
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674 if (order) {
2675 for (i = 0; i <= end_zone; i++) {
2676 struct zone *zone = pgdat->node_zones + i;
2677
2678 if (!populated_zone(zone))
2679 continue;
2680
2681 if (zone->all_unreclaimable && priority != DEF_PRIORITY)
2682 continue;
2683
2684
2685 if (!zone_watermark_ok(zone, 0,
2686 high_wmark_pages(zone), 0, 0)) {
2687 order = sc.order = 0;
2688 goto loop_again;
2689 }
2690
2691
2692 zone_clear_flag(zone, ZONE_CONGESTED);
2693 }
2694 }
2695
2696
2697
2698
2699
2700
2701
2702 *classzone_idx = end_zone;
2703 return order;
2704}
2705
2706static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, int classzone_idx)
2707{
2708 long remaining = 0;
2709 DEFINE_WAIT(wait);
2710
2711 if (freezing(current) || kthread_should_stop())
2712 return;
2713
2714 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
2715
2716
2717 if (!sleeping_prematurely(pgdat, order, remaining, classzone_idx)) {
2718 remaining = schedule_timeout(HZ/10);
2719 finish_wait(&pgdat->kswapd_wait, &wait);
2720 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
2721 }
2722
2723
2724
2725
2726
2727 if (!sleeping_prematurely(pgdat, order, remaining, classzone_idx)) {
2728 trace_mm_vmscan_kswapd_sleep(pgdat->node_id);
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738 set_pgdat_percpu_threshold(pgdat, calculate_normal_threshold);
2739 schedule();
2740 set_pgdat_percpu_threshold(pgdat, calculate_pressure_threshold);
2741 } else {
2742 if (remaining)
2743 count_vm_event(KSWAPD_LOW_WMARK_HIT_QUICKLY);
2744 else
2745 count_vm_event(KSWAPD_HIGH_WMARK_HIT_QUICKLY);
2746 }
2747 finish_wait(&pgdat->kswapd_wait, &wait);
2748}
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763static int kswapd(void *p)
2764{
2765 unsigned long order, new_order;
2766 int classzone_idx, new_classzone_idx;
2767 pg_data_t *pgdat = (pg_data_t*)p;
2768 struct task_struct *tsk = current;
2769
2770 struct reclaim_state reclaim_state = {
2771 .reclaimed_slab = 0,
2772 };
2773 const struct cpumask *cpumask = cpumask_of_node(pgdat->node_id);
2774
2775 lockdep_set_current_reclaim_state(GFP_KERNEL);
2776
2777 if (!cpumask_empty(cpumask))
2778 set_cpus_allowed_ptr(tsk, cpumask);
2779 current->reclaim_state = &reclaim_state;
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793 tsk->flags |= PF_MEMALLOC | PF_SWAPWRITE | PF_KSWAPD;
2794 set_freezable();
2795
2796 order = new_order = 0;
2797 classzone_idx = new_classzone_idx = pgdat->nr_zones - 1;
2798 for ( ; ; ) {
2799 int ret;
2800
2801
2802
2803
2804
2805
2806 if (classzone_idx >= new_classzone_idx && order == new_order) {
2807 new_order = pgdat->kswapd_max_order;
2808 new_classzone_idx = pgdat->classzone_idx;
2809 pgdat->kswapd_max_order = 0;
2810 pgdat->classzone_idx = pgdat->nr_zones - 1;
2811 }
2812
2813 if (order < new_order || classzone_idx > new_classzone_idx) {
2814
2815
2816
2817
2818 order = new_order;
2819 classzone_idx = new_classzone_idx;
2820 } else {
2821 kswapd_try_to_sleep(pgdat, order, classzone_idx);
2822 order = pgdat->kswapd_max_order;
2823 classzone_idx = pgdat->classzone_idx;
2824 pgdat->kswapd_max_order = 0;
2825 pgdat->classzone_idx = pgdat->nr_zones - 1;
2826 }
2827
2828 ret = try_to_freeze();
2829 if (kthread_should_stop())
2830 break;
2831
2832
2833
2834
2835
2836 if (!ret) {
2837 trace_mm_vmscan_kswapd_wake(pgdat->node_id, order);
2838 order = balance_pgdat(pgdat, order, &classzone_idx);
2839 }
2840 }
2841 return 0;
2842}
2843
2844
2845
2846
2847void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx)
2848{
2849 pg_data_t *pgdat;
2850
2851 if (!populated_zone(zone))
2852 return;
2853
2854 if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
2855 return;
2856 pgdat = zone->zone_pgdat;
2857 if (pgdat->kswapd_max_order < order) {
2858 pgdat->kswapd_max_order = order;
2859 pgdat->classzone_idx = min(pgdat->classzone_idx, classzone_idx);
2860 }
2861 if (!waitqueue_active(&pgdat->kswapd_wait))
2862 return;
2863 if (zone_watermark_ok_safe(zone, order, low_wmark_pages(zone), 0, 0))
2864 return;
2865
2866 trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
2867 wake_up_interruptible(&pgdat->kswapd_wait);
2868}
2869
2870
2871
2872
2873
2874
2875
2876
2877unsigned long global_reclaimable_pages(void)
2878{
2879 int nr;
2880
2881 nr = global_page_state(NR_ACTIVE_FILE) +
2882 global_page_state(NR_INACTIVE_FILE);
2883
2884 if (nr_swap_pages > 0)
2885 nr += global_page_state(NR_ACTIVE_ANON) +
2886 global_page_state(NR_INACTIVE_ANON);
2887
2888 return nr;
2889}
2890
2891unsigned long zone_reclaimable_pages(struct zone *zone)
2892{
2893 int nr;
2894
2895 nr = zone_page_state(zone, NR_ACTIVE_FILE) +
2896 zone_page_state(zone, NR_INACTIVE_FILE);
2897
2898 if (nr_swap_pages > 0)
2899 nr += zone_page_state(zone, NR_ACTIVE_ANON) +
2900 zone_page_state(zone, NR_INACTIVE_ANON);
2901
2902 return nr;
2903}
2904
2905#ifdef CONFIG_HIBERNATION
2906
2907
2908
2909
2910
2911
2912
2913
2914unsigned long shrink_all_memory(unsigned long nr_to_reclaim)
2915{
2916 struct reclaim_state reclaim_state;
2917 struct scan_control sc = {
2918 .gfp_mask = GFP_HIGHUSER_MOVABLE,
2919 .may_swap = 1,
2920 .may_unmap = 1,
2921 .may_writepage = 1,
2922 .nr_to_reclaim = nr_to_reclaim,
2923 .hibernation_mode = 1,
2924 .order = 0,
2925 };
2926 struct shrink_control shrink = {
2927 .gfp_mask = sc.gfp_mask,
2928 };
2929 struct zonelist *zonelist = node_zonelist(numa_node_id(), sc.gfp_mask);
2930 struct task_struct *p = current;
2931 unsigned long nr_reclaimed;
2932
2933 p->flags |= PF_MEMALLOC;
2934 lockdep_set_current_reclaim_state(sc.gfp_mask);
2935 reclaim_state.reclaimed_slab = 0;
2936 p->reclaim_state = &reclaim_state;
2937
2938 nr_reclaimed = do_try_to_free_pages(zonelist, &sc, &shrink);
2939
2940 p->reclaim_state = NULL;
2941 lockdep_clear_current_reclaim_state();
2942 p->flags &= ~PF_MEMALLOC;
2943
2944 return nr_reclaimed;
2945}
2946#endif
2947
2948
2949
2950
2951
2952static int __devinit cpu_callback(struct notifier_block *nfb,
2953 unsigned long action, void *hcpu)
2954{
2955 int nid;
2956
2957 if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) {
2958 for_each_node_state(nid, N_HIGH_MEMORY) {
2959 pg_data_t *pgdat = NODE_DATA(nid);
2960 const struct cpumask *mask;
2961
2962 mask = cpumask_of_node(pgdat->node_id);
2963
2964 if (cpumask_any_and(cpu_online_mask, mask) < nr_cpu_ids)
2965
2966 set_cpus_allowed_ptr(pgdat->kswapd, mask);
2967 }
2968 }
2969 return NOTIFY_OK;
2970}
2971
2972
2973
2974
2975
2976int kswapd_run(int nid)
2977{
2978 pg_data_t *pgdat = NODE_DATA(nid);
2979 int ret = 0;
2980
2981 if (pgdat->kswapd)
2982 return 0;
2983
2984 pgdat->kswapd = kthread_run(kswapd, pgdat, "kswapd%d", nid);
2985 if (IS_ERR(pgdat->kswapd)) {
2986
2987 BUG_ON(system_state == SYSTEM_BOOTING);
2988 printk("Failed to start kswapd on node %d\n",nid);
2989 ret = -1;
2990 }
2991 return ret;
2992}
2993
2994
2995
2996
2997void kswapd_stop(int nid)
2998{
2999 struct task_struct *kswapd = NODE_DATA(nid)->kswapd;
3000
3001 if (kswapd)
3002 kthread_stop(kswapd);
3003}
3004
3005static int __init kswapd_init(void)
3006{
3007 int nid;
3008
3009 swap_setup();
3010 for_each_node_state(nid, N_HIGH_MEMORY)
3011 kswapd_run(nid);
3012 hotcpu_notifier(cpu_callback, 0);
3013 return 0;
3014}
3015
3016module_init(kswapd_init)
3017
3018#ifdef CONFIG_NUMA
3019
3020
3021
3022
3023
3024
3025int zone_reclaim_mode __read_mostly;
3026
3027#define RECLAIM_OFF 0
3028#define RECLAIM_ZONE (1<<0)
3029#define RECLAIM_WRITE (1<<1)
3030#define RECLAIM_SWAP (1<<2)
3031
3032
3033
3034
3035
3036
3037#define ZONE_RECLAIM_PRIORITY 4
3038
3039
3040
3041
3042
3043int sysctl_min_unmapped_ratio = 1;
3044
3045
3046
3047
3048
3049int sysctl_min_slab_ratio = 5;
3050
3051static inline unsigned long zone_unmapped_file_pages(struct zone *zone)
3052{
3053 unsigned long file_mapped = zone_page_state(zone, NR_FILE_MAPPED);
3054 unsigned long file_lru = zone_page_state(zone, NR_INACTIVE_FILE) +
3055 zone_page_state(zone, NR_ACTIVE_FILE);
3056
3057
3058
3059
3060
3061
3062 return (file_lru > file_mapped) ? (file_lru - file_mapped) : 0;
3063}
3064
3065
3066static long zone_pagecache_reclaimable(struct zone *zone)
3067{
3068 long nr_pagecache_reclaimable;
3069 long delta = 0;
3070
3071
3072
3073
3074
3075
3076
3077 if (zone_reclaim_mode & RECLAIM_SWAP)
3078 nr_pagecache_reclaimable = zone_page_state(zone, NR_FILE_PAGES);
3079 else
3080 nr_pagecache_reclaimable = zone_unmapped_file_pages(zone);
3081
3082
3083 if (!(zone_reclaim_mode & RECLAIM_WRITE))
3084 delta += zone_page_state(zone, NR_FILE_DIRTY);
3085
3086
3087 if (unlikely(delta > nr_pagecache_reclaimable))
3088 delta = nr_pagecache_reclaimable;
3089
3090 return nr_pagecache_reclaimable - delta;
3091}
3092
3093
3094
3095
3096static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
3097{
3098
3099 const unsigned long nr_pages = 1 << order;
3100 struct task_struct *p = current;
3101 struct reclaim_state reclaim_state;
3102 int priority;
3103 struct scan_control sc = {
3104 .may_writepage = !!(zone_reclaim_mode & RECLAIM_WRITE),
3105 .may_unmap = !!(zone_reclaim_mode & RECLAIM_SWAP),
3106 .may_swap = 1,
3107 .nr_to_reclaim = max_t(unsigned long, nr_pages,
3108 SWAP_CLUSTER_MAX),
3109 .gfp_mask = gfp_mask,
3110 .order = order,
3111 };
3112 struct shrink_control shrink = {
3113 .gfp_mask = sc.gfp_mask,
3114 };
3115 unsigned long nr_slab_pages0, nr_slab_pages1;
3116
3117 cond_resched();
3118
3119
3120
3121
3122
3123 p->flags |= PF_MEMALLOC | PF_SWAPWRITE;
3124 lockdep_set_current_reclaim_state(gfp_mask);
3125 reclaim_state.reclaimed_slab = 0;
3126 p->reclaim_state = &reclaim_state;
3127
3128 if (zone_pagecache_reclaimable(zone) > zone->min_unmapped_pages) {
3129
3130
3131
3132
3133 priority = ZONE_RECLAIM_PRIORITY;
3134 do {
3135 shrink_zone(priority, zone, &sc);
3136 priority--;
3137 } while (priority >= 0 && sc.nr_reclaimed < nr_pages);
3138 }
3139
3140 nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
3141 if (nr_slab_pages0 > zone->min_slab_pages) {
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152 for (;;) {
3153 unsigned long lru_pages = zone_reclaimable_pages(zone);
3154
3155
3156 if (!shrink_slab(&shrink, sc.nr_scanned, lru_pages))
3157 break;
3158
3159
3160 nr_slab_pages1 = zone_page_state(zone,
3161 NR_SLAB_RECLAIMABLE);
3162 if (nr_slab_pages1 + nr_pages <= nr_slab_pages0)
3163 break;
3164 }
3165
3166
3167
3168
3169
3170 nr_slab_pages1 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
3171 if (nr_slab_pages1 < nr_slab_pages0)
3172 sc.nr_reclaimed += nr_slab_pages0 - nr_slab_pages1;
3173 }
3174
3175 p->reclaim_state = NULL;
3176 current->flags &= ~(PF_MEMALLOC | PF_SWAPWRITE);
3177 lockdep_clear_current_reclaim_state();
3178 return sc.nr_reclaimed >= nr_pages;
3179}
3180
3181int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
3182{
3183 int node_id;
3184 int ret;
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196 if (zone_pagecache_reclaimable(zone) <= zone->min_unmapped_pages &&
3197 zone_page_state(zone, NR_SLAB_RECLAIMABLE) <= zone->min_slab_pages)
3198 return ZONE_RECLAIM_FULL;
3199
3200 if (zone->all_unreclaimable)
3201 return ZONE_RECLAIM_FULL;
3202
3203
3204
3205
3206 if (!(gfp_mask & __GFP_WAIT) || (current->flags & PF_MEMALLOC))
3207 return ZONE_RECLAIM_NOSCAN;
3208
3209
3210
3211
3212
3213
3214
3215 node_id = zone_to_nid(zone);
3216 if (node_state(node_id, N_CPU) && node_id != numa_node_id())
3217 return ZONE_RECLAIM_NOSCAN;
3218
3219 if (zone_test_and_set_flag(zone, ZONE_RECLAIM_LOCKED))
3220 return ZONE_RECLAIM_NOSCAN;
3221
3222 ret = __zone_reclaim(zone, gfp_mask, order);
3223 zone_clear_flag(zone, ZONE_RECLAIM_LOCKED);
3224
3225 if (!ret)
3226 count_vm_event(PGSCAN_ZONE_RECLAIM_FAILED);
3227
3228 return ret;
3229}
3230#endif
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246int page_evictable(struct page *page, struct vm_area_struct *vma)
3247{
3248
3249 if (mapping_unevictable(page_mapping(page)))
3250 return 0;
3251
3252 if (PageMlocked(page) || (vma && is_mlocked_vma(vma, page)))
3253 return 0;
3254
3255 return 1;
3256}
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269static void check_move_unevictable_page(struct page *page, struct zone *zone)
3270{
3271 VM_BUG_ON(PageActive(page));
3272
3273retry:
3274 ClearPageUnevictable(page);
3275 if (page_evictable(page, NULL)) {
3276 enum lru_list l = page_lru_base_type(page);
3277
3278 __dec_zone_state(zone, NR_UNEVICTABLE);
3279 list_move(&page->lru, &zone->lru[l].list);
3280 mem_cgroup_move_lists(page, LRU_UNEVICTABLE, l);
3281 __inc_zone_state(zone, NR_INACTIVE_ANON + l);
3282 __count_vm_event(UNEVICTABLE_PGRESCUED);
3283 } else {
3284
3285
3286
3287 SetPageUnevictable(page);
3288 list_move(&page->lru, &zone->lru[LRU_UNEVICTABLE].list);
3289 mem_cgroup_rotate_lru_list(page, LRU_UNEVICTABLE);
3290 if (page_evictable(page, NULL))
3291 goto retry;
3292 }
3293}
3294
3295
3296
3297
3298
3299
3300
3301
3302void scan_mapping_unevictable_pages(struct address_space *mapping)
3303{
3304 pgoff_t next = 0;
3305 pgoff_t end = (i_size_read(mapping->host) + PAGE_CACHE_SIZE - 1) >>
3306 PAGE_CACHE_SHIFT;
3307 struct zone *zone;
3308 struct pagevec pvec;
3309
3310 if (mapping->nrpages == 0)
3311 return;
3312
3313 pagevec_init(&pvec, 0);
3314 while (next < end &&
3315 pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) {
3316 int i;
3317 int pg_scanned = 0;
3318
3319 zone = NULL;
3320
3321 for (i = 0; i < pagevec_count(&pvec); i++) {
3322 struct page *page = pvec.pages[i];
3323 pgoff_t page_index = page->index;
3324 struct zone *pagezone = page_zone(page);
3325
3326 pg_scanned++;
3327 if (page_index > next)
3328 next = page_index;
3329 next++;
3330
3331 if (pagezone != zone) {
3332 if (zone)
3333 spin_unlock_irq(&zone->lru_lock);
3334 zone = pagezone;
3335 spin_lock_irq(&zone->lru_lock);
3336 }
3337
3338 if (PageLRU(page) && PageUnevictable(page))
3339 check_move_unevictable_page(page, zone);
3340 }
3341 if (zone)
3342 spin_unlock_irq(&zone->lru_lock);
3343 pagevec_release(&pvec);
3344
3345 count_vm_events(UNEVICTABLE_PGSCANNED, pg_scanned);
3346 }
3347
3348}
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360#define SCAN_UNEVICTABLE_BATCH_SIZE 16UL
3361static void scan_zone_unevictable_pages(struct zone *zone)
3362{
3363 struct list_head *l_unevictable = &zone->lru[LRU_UNEVICTABLE].list;
3364 unsigned long scan;
3365 unsigned long nr_to_scan = zone_page_state(zone, NR_UNEVICTABLE);
3366
3367 while (nr_to_scan > 0) {
3368 unsigned long batch_size = min(nr_to_scan,
3369 SCAN_UNEVICTABLE_BATCH_SIZE);
3370
3371 spin_lock_irq(&zone->lru_lock);
3372 for (scan = 0; scan < batch_size; scan++) {
3373 struct page *page = lru_to_page(l_unevictable);
3374
3375 if (!trylock_page(page))
3376 continue;
3377
3378 prefetchw_prev_lru_page(page, l_unevictable, flags);
3379
3380 if (likely(PageLRU(page) && PageUnevictable(page)))
3381 check_move_unevictable_page(page, zone);
3382
3383 unlock_page(page);
3384 }
3385 spin_unlock_irq(&zone->lru_lock);
3386
3387 nr_to_scan -= batch_size;
3388 }
3389}
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403static void scan_all_zones_unevictable_pages(void)
3404{
3405 struct zone *zone;
3406
3407 for_each_zone(zone) {
3408 scan_zone_unevictable_pages(zone);
3409 }
3410}
3411
3412
3413
3414
3415
3416unsigned long scan_unevictable_pages;
3417
3418int scan_unevictable_handler(struct ctl_table *table, int write,
3419 void __user *buffer,
3420 size_t *length, loff_t *ppos)
3421{
3422 proc_doulongvec_minmax(table, write, buffer, length, ppos);
3423
3424 if (write && *(unsigned long *)table->data)
3425 scan_all_zones_unevictable_pages();
3426
3427 scan_unevictable_pages = 0;
3428 return 0;
3429}
3430
3431#ifdef CONFIG_NUMA
3432
3433
3434
3435
3436
3437static ssize_t read_scan_unevictable_node(struct sys_device *dev,
3438 struct sysdev_attribute *attr,
3439 char *buf)
3440{
3441 return sprintf(buf, "0\n");
3442}
3443
3444static ssize_t write_scan_unevictable_node(struct sys_device *dev,
3445 struct sysdev_attribute *attr,
3446 const char *buf, size_t count)
3447{
3448 struct zone *node_zones = NODE_DATA(dev->id)->node_zones;
3449 struct zone *zone;
3450 unsigned long res;
3451 unsigned long req = strict_strtoul(buf, 10, &res);
3452
3453 if (!req)
3454 return 1;
3455
3456 for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; ++zone) {
3457 if (!populated_zone(zone))
3458 continue;
3459 scan_zone_unevictable_pages(zone);
3460 }
3461 return 1;
3462}
3463
3464
3465static SYSDEV_ATTR(scan_unevictable_pages, S_IRUGO | S_IWUSR,
3466 read_scan_unevictable_node,
3467 write_scan_unevictable_node);
3468
3469int scan_unevictable_register_node(struct node *node)
3470{
3471 return sysdev_create_file(&node->sysdev, &attr_scan_unevictable_pages);
3472}
3473
3474void scan_unevictable_unregister_node(struct node *node)
3475{
3476 sysdev_remove_file(&node->sysdev, &attr_scan_unevictable_pages);
3477}
3478#endif
3479