1
2
3
4
5
6
7
8
9#include <linux/mm.h>
10#include <linux/sched/mm.h>
11#include <linux/sched/task.h>
12#include <linux/hugetlb.h>
13#include <linux/mman.h>
14#include <linux/slab.h>
15#include <linux/kernel_stat.h>
16#include <linux/swap.h>
17#include <linux/vmalloc.h>
18#include <linux/pagemap.h>
19#include <linux/namei.h>
20#include <linux/shmem_fs.h>
21#include <linux/blkdev.h>
22#include <linux/random.h>
23#include <linux/writeback.h>
24#include <linux/proc_fs.h>
25#include <linux/seq_file.h>
26#include <linux/init.h>
27#include <linux/ksm.h>
28#include <linux/rmap.h>
29#include <linux/security.h>
30#include <linux/backing-dev.h>
31#include <linux/mutex.h>
32#include <linux/capability.h>
33#include <linux/syscalls.h>
34#include <linux/memcontrol.h>
35#include <linux/poll.h>
36#include <linux/oom.h>
37#include <linux/frontswap.h>
38#include <linux/swapfile.h>
39#include <linux/export.h>
40#include <linux/swap_slots.h>
41#include <linux/sort.h>
42
43#include <asm/pgtable.h>
44#include <asm/tlbflush.h>
45#include <linux/swapops.h>
46#include <linux/swap_cgroup.h>
47
48static bool swap_count_continued(struct swap_info_struct *, pgoff_t,
49 unsigned char);
50static void free_swap_count_continuations(struct swap_info_struct *);
51static sector_t map_swap_entry(swp_entry_t, struct block_device**);
52
53DEFINE_SPINLOCK(swap_lock);
54static unsigned int nr_swapfiles;
55atomic_long_t nr_swap_pages;
56
57
58
59
60
61EXPORT_SYMBOL_GPL(nr_swap_pages);
62
63long total_swap_pages;
64static int least_priority = -1;
65
66static const char Bad_file[] = "Bad swap file entry ";
67static const char Unused_file[] = "Unused swap file entry ";
68static const char Bad_offset[] = "Bad swap offset entry ";
69static const char Unused_offset[] = "Unused swap offset entry ";
70
71
72
73
74
75PLIST_HEAD(swap_active_head);
76
77
78
79
80
81
82
83
84
85
86
87
88
89static struct plist_head *swap_avail_heads;
90static DEFINE_SPINLOCK(swap_avail_lock);
91
92struct swap_info_struct *swap_info[MAX_SWAPFILES];
93
94static DEFINE_MUTEX(swapon_mutex);
95
96static DECLARE_WAIT_QUEUE_HEAD(proc_poll_wait);
97
98static atomic_t proc_poll_event = ATOMIC_INIT(0);
99
100atomic_t nr_rotate_swap = ATOMIC_INIT(0);
101
102static struct swap_info_struct *swap_type_to_swap_info(int type)
103{
104 if (type >= READ_ONCE(nr_swapfiles))
105 return NULL;
106
107 smp_rmb();
108 return READ_ONCE(swap_info[type]);
109}
110
111static inline unsigned char swap_count(unsigned char ent)
112{
113 return ent & ~SWAP_HAS_CACHE;
114}
115
116
117#define TTRS_ANYWAY 0x1
118
119
120
121
122#define TTRS_UNMAPPED 0x2
123
124#define TTRS_FULL 0x4
125
126
127static int __try_to_reclaim_swap(struct swap_info_struct *si,
128 unsigned long offset, unsigned long flags)
129{
130 swp_entry_t entry = swp_entry(si->type, offset);
131 struct page *page;
132 int ret = 0;
133
134 page = find_get_page(swap_address_space(entry), offset);
135 if (!page)
136 return 0;
137
138
139
140
141
142
143
144 if (trylock_page(page)) {
145 if ((flags & TTRS_ANYWAY) ||
146 ((flags & TTRS_UNMAPPED) && !page_mapped(page)) ||
147 ((flags & TTRS_FULL) && mem_cgroup_swap_full(page)))
148 ret = try_to_free_swap(page);
149 unlock_page(page);
150 }
151 put_page(page);
152 return ret;
153}
154
155static inline struct swap_extent *first_se(struct swap_info_struct *sis)
156{
157 struct rb_node *rb = rb_first(&sis->swap_extent_root);
158 return rb_entry(rb, struct swap_extent, rb_node);
159}
160
161static inline struct swap_extent *next_se(struct swap_extent *se)
162{
163 struct rb_node *rb = rb_next(&se->rb_node);
164 return rb ? rb_entry(rb, struct swap_extent, rb_node) : NULL;
165}
166
167
168
169
170
171static int discard_swap(struct swap_info_struct *si)
172{
173 struct swap_extent *se;
174 sector_t start_block;
175 sector_t nr_blocks;
176 int err = 0;
177
178
179 se = first_se(si);
180 start_block = (se->start_block + 1) << (PAGE_SHIFT - 9);
181 nr_blocks = ((sector_t)se->nr_pages - 1) << (PAGE_SHIFT - 9);
182 if (nr_blocks) {
183 err = blkdev_issue_discard(si->bdev, start_block,
184 nr_blocks, GFP_KERNEL, 0);
185 if (err)
186 return err;
187 cond_resched();
188 }
189
190 for (se = next_se(se); se; se = next_se(se)) {
191 start_block = se->start_block << (PAGE_SHIFT - 9);
192 nr_blocks = (sector_t)se->nr_pages << (PAGE_SHIFT - 9);
193
194 err = blkdev_issue_discard(si->bdev, start_block,
195 nr_blocks, GFP_KERNEL, 0);
196 if (err)
197 break;
198
199 cond_resched();
200 }
201 return err;
202}
203
204static struct swap_extent *
205offset_to_swap_extent(struct swap_info_struct *sis, unsigned long offset)
206{
207 struct swap_extent *se;
208 struct rb_node *rb;
209
210 rb = sis->swap_extent_root.rb_node;
211 while (rb) {
212 se = rb_entry(rb, struct swap_extent, rb_node);
213 if (offset < se->start_page)
214 rb = rb->rb_left;
215 else if (offset >= se->start_page + se->nr_pages)
216 rb = rb->rb_right;
217 else
218 return se;
219 }
220
221 BUG();
222}
223
224
225
226
227
228static void discard_swap_cluster(struct swap_info_struct *si,
229 pgoff_t start_page, pgoff_t nr_pages)
230{
231 struct swap_extent *se = offset_to_swap_extent(si, start_page);
232
233 while (nr_pages) {
234 pgoff_t offset = start_page - se->start_page;
235 sector_t start_block = se->start_block + offset;
236 sector_t nr_blocks = se->nr_pages - offset;
237
238 if (nr_blocks > nr_pages)
239 nr_blocks = nr_pages;
240 start_page += nr_blocks;
241 nr_pages -= nr_blocks;
242
243 start_block <<= PAGE_SHIFT - 9;
244 nr_blocks <<= PAGE_SHIFT - 9;
245 if (blkdev_issue_discard(si->bdev, start_block,
246 nr_blocks, GFP_NOIO, 0))
247 break;
248
249 se = next_se(se);
250 }
251}
252
253#ifdef CONFIG_THP_SWAP
254#define SWAPFILE_CLUSTER HPAGE_PMD_NR
255
256#define swap_entry_size(size) (size)
257#else
258#define SWAPFILE_CLUSTER 256
259
260
261
262
263
264#define swap_entry_size(size) 1
265#endif
266#define LATENCY_LIMIT 256
267
268static inline void cluster_set_flag(struct swap_cluster_info *info,
269 unsigned int flag)
270{
271 info->flags = flag;
272}
273
274static inline unsigned int cluster_count(struct swap_cluster_info *info)
275{
276 return info->data;
277}
278
279static inline void cluster_set_count(struct swap_cluster_info *info,
280 unsigned int c)
281{
282 info->data = c;
283}
284
285static inline void cluster_set_count_flag(struct swap_cluster_info *info,
286 unsigned int c, unsigned int f)
287{
288 info->flags = f;
289 info->data = c;
290}
291
292static inline unsigned int cluster_next(struct swap_cluster_info *info)
293{
294 return info->data;
295}
296
297static inline void cluster_set_next(struct swap_cluster_info *info,
298 unsigned int n)
299{
300 info->data = n;
301}
302
303static inline void cluster_set_next_flag(struct swap_cluster_info *info,
304 unsigned int n, unsigned int f)
305{
306 info->flags = f;
307 info->data = n;
308}
309
310static inline bool cluster_is_free(struct swap_cluster_info *info)
311{
312 return info->flags & CLUSTER_FLAG_FREE;
313}
314
315static inline bool cluster_is_null(struct swap_cluster_info *info)
316{
317 return info->flags & CLUSTER_FLAG_NEXT_NULL;
318}
319
320static inline void cluster_set_null(struct swap_cluster_info *info)
321{
322 info->flags = CLUSTER_FLAG_NEXT_NULL;
323 info->data = 0;
324}
325
326static inline bool cluster_is_huge(struct swap_cluster_info *info)
327{
328 if (IS_ENABLED(CONFIG_THP_SWAP))
329 return info->flags & CLUSTER_FLAG_HUGE;
330 return false;
331}
332
333static inline void cluster_clear_huge(struct swap_cluster_info *info)
334{
335 info->flags &= ~CLUSTER_FLAG_HUGE;
336}
337
338static inline struct swap_cluster_info *lock_cluster(struct swap_info_struct *si,
339 unsigned long offset)
340{
341 struct swap_cluster_info *ci;
342
343 ci = si->cluster_info;
344 if (ci) {
345 ci += offset / SWAPFILE_CLUSTER;
346 spin_lock(&ci->lock);
347 }
348 return ci;
349}
350
351static inline void unlock_cluster(struct swap_cluster_info *ci)
352{
353 if (ci)
354 spin_unlock(&ci->lock);
355}
356
357
358
359
360
361static inline struct swap_cluster_info *lock_cluster_or_swap_info(
362 struct swap_info_struct *si, unsigned long offset)
363{
364 struct swap_cluster_info *ci;
365
366
367 ci = lock_cluster(si, offset);
368
369 if (!ci)
370 spin_lock(&si->lock);
371
372 return ci;
373}
374
375static inline void unlock_cluster_or_swap_info(struct swap_info_struct *si,
376 struct swap_cluster_info *ci)
377{
378 if (ci)
379 unlock_cluster(ci);
380 else
381 spin_unlock(&si->lock);
382}
383
384static inline bool cluster_list_empty(struct swap_cluster_list *list)
385{
386 return cluster_is_null(&list->head);
387}
388
389static inline unsigned int cluster_list_first(struct swap_cluster_list *list)
390{
391 return cluster_next(&list->head);
392}
393
394static void cluster_list_init(struct swap_cluster_list *list)
395{
396 cluster_set_null(&list->head);
397 cluster_set_null(&list->tail);
398}
399
400static void cluster_list_add_tail(struct swap_cluster_list *list,
401 struct swap_cluster_info *ci,
402 unsigned int idx)
403{
404 if (cluster_list_empty(list)) {
405 cluster_set_next_flag(&list->head, idx, 0);
406 cluster_set_next_flag(&list->tail, idx, 0);
407 } else {
408 struct swap_cluster_info *ci_tail;
409 unsigned int tail = cluster_next(&list->tail);
410
411
412
413
414
415 ci_tail = ci + tail;
416 spin_lock_nested(&ci_tail->lock, SINGLE_DEPTH_NESTING);
417 cluster_set_next(ci_tail, idx);
418 spin_unlock(&ci_tail->lock);
419 cluster_set_next_flag(&list->tail, idx, 0);
420 }
421}
422
423static unsigned int cluster_list_del_first(struct swap_cluster_list *list,
424 struct swap_cluster_info *ci)
425{
426 unsigned int idx;
427
428 idx = cluster_next(&list->head);
429 if (cluster_next(&list->tail) == idx) {
430 cluster_set_null(&list->head);
431 cluster_set_null(&list->tail);
432 } else
433 cluster_set_next_flag(&list->head,
434 cluster_next(&ci[idx]), 0);
435
436 return idx;
437}
438
439
440static void swap_cluster_schedule_discard(struct swap_info_struct *si,
441 unsigned int idx)
442{
443
444
445
446
447
448
449 memset(si->swap_map + idx * SWAPFILE_CLUSTER,
450 SWAP_MAP_BAD, SWAPFILE_CLUSTER);
451
452 cluster_list_add_tail(&si->discard_clusters, si->cluster_info, idx);
453
454 schedule_work(&si->discard_work);
455}
456
457static void __free_cluster(struct swap_info_struct *si, unsigned long idx)
458{
459 struct swap_cluster_info *ci = si->cluster_info;
460
461 cluster_set_flag(ci + idx, CLUSTER_FLAG_FREE);
462 cluster_list_add_tail(&si->free_clusters, ci, idx);
463}
464
465
466
467
468
469static void swap_do_scheduled_discard(struct swap_info_struct *si)
470{
471 struct swap_cluster_info *info, *ci;
472 unsigned int idx;
473
474 info = si->cluster_info;
475
476 while (!cluster_list_empty(&si->discard_clusters)) {
477 idx = cluster_list_del_first(&si->discard_clusters, info);
478 spin_unlock(&si->lock);
479
480 discard_swap_cluster(si, idx * SWAPFILE_CLUSTER,
481 SWAPFILE_CLUSTER);
482
483 spin_lock(&si->lock);
484 ci = lock_cluster(si, idx * SWAPFILE_CLUSTER);
485 __free_cluster(si, idx);
486 memset(si->swap_map + idx * SWAPFILE_CLUSTER,
487 0, SWAPFILE_CLUSTER);
488 unlock_cluster(ci);
489 }
490}
491
492static void swap_discard_work(struct work_struct *work)
493{
494 struct swap_info_struct *si;
495
496 si = container_of(work, struct swap_info_struct, discard_work);
497
498 spin_lock(&si->lock);
499 swap_do_scheduled_discard(si);
500 spin_unlock(&si->lock);
501}
502
503static void alloc_cluster(struct swap_info_struct *si, unsigned long idx)
504{
505 struct swap_cluster_info *ci = si->cluster_info;
506
507 VM_BUG_ON(cluster_list_first(&si->free_clusters) != idx);
508 cluster_list_del_first(&si->free_clusters, ci);
509 cluster_set_count_flag(ci + idx, 0, 0);
510}
511
512static void free_cluster(struct swap_info_struct *si, unsigned long idx)
513{
514 struct swap_cluster_info *ci = si->cluster_info + idx;
515
516 VM_BUG_ON(cluster_count(ci) != 0);
517
518
519
520
521
522 if ((si->flags & (SWP_WRITEOK | SWP_PAGE_DISCARD)) ==
523 (SWP_WRITEOK | SWP_PAGE_DISCARD)) {
524 swap_cluster_schedule_discard(si, idx);
525 return;
526 }
527
528 __free_cluster(si, idx);
529}
530
531
532
533
534
535static void inc_cluster_info_page(struct swap_info_struct *p,
536 struct swap_cluster_info *cluster_info, unsigned long page_nr)
537{
538 unsigned long idx = page_nr / SWAPFILE_CLUSTER;
539
540 if (!cluster_info)
541 return;
542 if (cluster_is_free(&cluster_info[idx]))
543 alloc_cluster(p, idx);
544
545 VM_BUG_ON(cluster_count(&cluster_info[idx]) >= SWAPFILE_CLUSTER);
546 cluster_set_count(&cluster_info[idx],
547 cluster_count(&cluster_info[idx]) + 1);
548}
549
550
551
552
553
554
555static void dec_cluster_info_page(struct swap_info_struct *p,
556 struct swap_cluster_info *cluster_info, unsigned long page_nr)
557{
558 unsigned long idx = page_nr / SWAPFILE_CLUSTER;
559
560 if (!cluster_info)
561 return;
562
563 VM_BUG_ON(cluster_count(&cluster_info[idx]) == 0);
564 cluster_set_count(&cluster_info[idx],
565 cluster_count(&cluster_info[idx]) - 1);
566
567 if (cluster_count(&cluster_info[idx]) == 0)
568 free_cluster(p, idx);
569}
570
571
572
573
574
575static bool
576scan_swap_map_ssd_cluster_conflict(struct swap_info_struct *si,
577 unsigned long offset)
578{
579 struct percpu_cluster *percpu_cluster;
580 bool conflict;
581
582 offset /= SWAPFILE_CLUSTER;
583 conflict = !cluster_list_empty(&si->free_clusters) &&
584 offset != cluster_list_first(&si->free_clusters) &&
585 cluster_is_free(&si->cluster_info[offset]);
586
587 if (!conflict)
588 return false;
589
590 percpu_cluster = this_cpu_ptr(si->percpu_cluster);
591 cluster_set_null(&percpu_cluster->index);
592 return true;
593}
594
595
596
597
598
599static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
600 unsigned long *offset, unsigned long *scan_base)
601{
602 struct percpu_cluster *cluster;
603 struct swap_cluster_info *ci;
604 bool found_free;
605 unsigned long tmp, max;
606
607new_cluster:
608 cluster = this_cpu_ptr(si->percpu_cluster);
609 if (cluster_is_null(&cluster->index)) {
610 if (!cluster_list_empty(&si->free_clusters)) {
611 cluster->index = si->free_clusters.head;
612 cluster->next = cluster_next(&cluster->index) *
613 SWAPFILE_CLUSTER;
614 } else if (!cluster_list_empty(&si->discard_clusters)) {
615
616
617
618
619 swap_do_scheduled_discard(si);
620 *scan_base = *offset = si->cluster_next;
621 goto new_cluster;
622 } else
623 return false;
624 }
625
626 found_free = false;
627
628
629
630
631
632 tmp = cluster->next;
633 max = min_t(unsigned long, si->max,
634 (cluster_next(&cluster->index) + 1) * SWAPFILE_CLUSTER);
635 if (tmp >= max) {
636 cluster_set_null(&cluster->index);
637 goto new_cluster;
638 }
639 ci = lock_cluster(si, tmp);
640 while (tmp < max) {
641 if (!si->swap_map[tmp]) {
642 found_free = true;
643 break;
644 }
645 tmp++;
646 }
647 unlock_cluster(ci);
648 if (!found_free) {
649 cluster_set_null(&cluster->index);
650 goto new_cluster;
651 }
652 cluster->next = tmp + 1;
653 *offset = tmp;
654 *scan_base = tmp;
655 return found_free;
656}
657
658static void __del_from_avail_list(struct swap_info_struct *p)
659{
660 int nid;
661
662 for_each_node(nid)
663 plist_del(&p->avail_lists[nid], &swap_avail_heads[nid]);
664}
665
666static void del_from_avail_list(struct swap_info_struct *p)
667{
668 spin_lock(&swap_avail_lock);
669 __del_from_avail_list(p);
670 spin_unlock(&swap_avail_lock);
671}
672
673static void swap_range_alloc(struct swap_info_struct *si, unsigned long offset,
674 unsigned int nr_entries)
675{
676 unsigned int end = offset + nr_entries - 1;
677
678 if (offset == si->lowest_bit)
679 si->lowest_bit += nr_entries;
680 if (end == si->highest_bit)
681 si->highest_bit -= nr_entries;
682 si->inuse_pages += nr_entries;
683 if (si->inuse_pages == si->pages) {
684 si->lowest_bit = si->max;
685 si->highest_bit = 0;
686 del_from_avail_list(si);
687 }
688}
689
690static void add_to_avail_list(struct swap_info_struct *p)
691{
692 int nid;
693
694 spin_lock(&swap_avail_lock);
695 for_each_node(nid) {
696 WARN_ON(!plist_node_empty(&p->avail_lists[nid]));
697 plist_add(&p->avail_lists[nid], &swap_avail_heads[nid]);
698 }
699 spin_unlock(&swap_avail_lock);
700}
701
702static void swap_range_free(struct swap_info_struct *si, unsigned long offset,
703 unsigned int nr_entries)
704{
705 unsigned long end = offset + nr_entries - 1;
706 void (*swap_slot_free_notify)(struct block_device *, unsigned long);
707
708 if (offset < si->lowest_bit)
709 si->lowest_bit = offset;
710 if (end > si->highest_bit) {
711 bool was_full = !si->highest_bit;
712
713 si->highest_bit = end;
714 if (was_full && (si->flags & SWP_WRITEOK))
715 add_to_avail_list(si);
716 }
717 atomic_long_add(nr_entries, &nr_swap_pages);
718 si->inuse_pages -= nr_entries;
719 if (si->flags & SWP_BLKDEV)
720 swap_slot_free_notify =
721 si->bdev->bd_disk->fops->swap_slot_free_notify;
722 else
723 swap_slot_free_notify = NULL;
724 while (offset <= end) {
725 frontswap_invalidate_page(si->type, offset);
726 if (swap_slot_free_notify)
727 swap_slot_free_notify(si->bdev, offset);
728 offset++;
729 }
730}
731
732static int scan_swap_map_slots(struct swap_info_struct *si,
733 unsigned char usage, int nr,
734 swp_entry_t slots[])
735{
736 struct swap_cluster_info *ci;
737 unsigned long offset;
738 unsigned long scan_base;
739 unsigned long last_in_cluster = 0;
740 int latency_ration = LATENCY_LIMIT;
741 int n_ret = 0;
742
743 if (nr > SWAP_BATCH)
744 nr = SWAP_BATCH;
745
746
747
748
749
750
751
752
753
754
755
756
757 si->flags += SWP_SCANNING;
758 scan_base = offset = si->cluster_next;
759
760
761 if (si->cluster_info) {
762 if (scan_swap_map_try_ssd_cluster(si, &offset, &scan_base))
763 goto checks;
764 else
765 goto scan;
766 }
767
768 if (unlikely(!si->cluster_nr--)) {
769 if (si->pages - si->inuse_pages < SWAPFILE_CLUSTER) {
770 si->cluster_nr = SWAPFILE_CLUSTER - 1;
771 goto checks;
772 }
773
774 spin_unlock(&si->lock);
775
776
777
778
779
780
781
782 scan_base = offset = si->lowest_bit;
783 last_in_cluster = offset + SWAPFILE_CLUSTER - 1;
784
785
786 for (; last_in_cluster <= si->highest_bit; offset++) {
787 if (si->swap_map[offset])
788 last_in_cluster = offset + SWAPFILE_CLUSTER;
789 else if (offset == last_in_cluster) {
790 spin_lock(&si->lock);
791 offset -= SWAPFILE_CLUSTER - 1;
792 si->cluster_next = offset;
793 si->cluster_nr = SWAPFILE_CLUSTER - 1;
794 goto checks;
795 }
796 if (unlikely(--latency_ration < 0)) {
797 cond_resched();
798 latency_ration = LATENCY_LIMIT;
799 }
800 }
801
802 offset = scan_base;
803 spin_lock(&si->lock);
804 si->cluster_nr = SWAPFILE_CLUSTER - 1;
805 }
806
807checks:
808 if (si->cluster_info) {
809 while (scan_swap_map_ssd_cluster_conflict(si, offset)) {
810
811 if (n_ret)
812 goto done;
813 if (!scan_swap_map_try_ssd_cluster(si, &offset,
814 &scan_base))
815 goto scan;
816 }
817 }
818 if (!(si->flags & SWP_WRITEOK))
819 goto no_page;
820 if (!si->highest_bit)
821 goto no_page;
822 if (offset > si->highest_bit)
823 scan_base = offset = si->lowest_bit;
824
825 ci = lock_cluster(si, offset);
826
827 if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
828 int swap_was_freed;
829 unlock_cluster(ci);
830 spin_unlock(&si->lock);
831 swap_was_freed = __try_to_reclaim_swap(si, offset, TTRS_ANYWAY);
832 spin_lock(&si->lock);
833
834 if (swap_was_freed)
835 goto checks;
836 goto scan;
837 }
838
839 if (si->swap_map[offset]) {
840 unlock_cluster(ci);
841 if (!n_ret)
842 goto scan;
843 else
844 goto done;
845 }
846 si->swap_map[offset] = usage;
847 inc_cluster_info_page(si, si->cluster_info, offset);
848 unlock_cluster(ci);
849
850 swap_range_alloc(si, offset, 1);
851 si->cluster_next = offset + 1;
852 slots[n_ret++] = swp_entry(si->type, offset);
853
854
855 if ((n_ret == nr) || (offset >= si->highest_bit))
856 goto done;
857
858
859
860
861 if (unlikely(--latency_ration < 0)) {
862 if (n_ret)
863 goto done;
864 spin_unlock(&si->lock);
865 cond_resched();
866 spin_lock(&si->lock);
867 latency_ration = LATENCY_LIMIT;
868 }
869
870
871 if (si->cluster_info) {
872 if (scan_swap_map_try_ssd_cluster(si, &offset, &scan_base))
873 goto checks;
874 else
875 goto done;
876 }
877
878 ++offset;
879
880
881 if (si->cluster_nr && !si->swap_map[offset]) {
882 --si->cluster_nr;
883 goto checks;
884 }
885
886done:
887 si->flags -= SWP_SCANNING;
888 return n_ret;
889
890scan:
891 spin_unlock(&si->lock);
892 while (++offset <= si->highest_bit) {
893 if (!si->swap_map[offset]) {
894 spin_lock(&si->lock);
895 goto checks;
896 }
897 if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
898 spin_lock(&si->lock);
899 goto checks;
900 }
901 if (unlikely(--latency_ration < 0)) {
902 cond_resched();
903 latency_ration = LATENCY_LIMIT;
904 }
905 }
906 offset = si->lowest_bit;
907 while (offset < scan_base) {
908 if (!si->swap_map[offset]) {
909 spin_lock(&si->lock);
910 goto checks;
911 }
912 if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
913 spin_lock(&si->lock);
914 goto checks;
915 }
916 if (unlikely(--latency_ration < 0)) {
917 cond_resched();
918 latency_ration = LATENCY_LIMIT;
919 }
920 offset++;
921 }
922 spin_lock(&si->lock);
923
924no_page:
925 si->flags -= SWP_SCANNING;
926 return n_ret;
927}
928
929static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot)
930{
931 unsigned long idx;
932 struct swap_cluster_info *ci;
933 unsigned long offset, i;
934 unsigned char *map;
935
936
937
938
939
940 if (!IS_ENABLED(CONFIG_THP_SWAP)) {
941 VM_WARN_ON_ONCE(1);
942 return 0;
943 }
944
945 if (cluster_list_empty(&si->free_clusters))
946 return 0;
947
948 idx = cluster_list_first(&si->free_clusters);
949 offset = idx * SWAPFILE_CLUSTER;
950 ci = lock_cluster(si, offset);
951 alloc_cluster(si, idx);
952 cluster_set_count_flag(ci, SWAPFILE_CLUSTER, CLUSTER_FLAG_HUGE);
953
954 map = si->swap_map + offset;
955 for (i = 0; i < SWAPFILE_CLUSTER; i++)
956 map[i] = SWAP_HAS_CACHE;
957 unlock_cluster(ci);
958 swap_range_alloc(si, offset, SWAPFILE_CLUSTER);
959 *slot = swp_entry(si->type, offset);
960
961 return 1;
962}
963
964static void swap_free_cluster(struct swap_info_struct *si, unsigned long idx)
965{
966 unsigned long offset = idx * SWAPFILE_CLUSTER;
967 struct swap_cluster_info *ci;
968
969 ci = lock_cluster(si, offset);
970 memset(si->swap_map + offset, 0, SWAPFILE_CLUSTER);
971 cluster_set_count_flag(ci, 0, 0);
972 free_cluster(si, idx);
973 unlock_cluster(ci);
974 swap_range_free(si, offset, SWAPFILE_CLUSTER);
975}
976
977static unsigned long scan_swap_map(struct swap_info_struct *si,
978 unsigned char usage)
979{
980 swp_entry_t entry;
981 int n_ret;
982
983 n_ret = scan_swap_map_slots(si, usage, 1, &entry);
984
985 if (n_ret)
986 return swp_offset(entry);
987 else
988 return 0;
989
990}
991
992int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size)
993{
994 unsigned long size = swap_entry_size(entry_size);
995 struct swap_info_struct *si, *next;
996 long avail_pgs;
997 int n_ret = 0;
998 int node;
999
1000
1001 WARN_ON_ONCE(n_goal > 1 && size == SWAPFILE_CLUSTER);
1002
1003 avail_pgs = atomic_long_read(&nr_swap_pages) / size;
1004 if (avail_pgs <= 0)
1005 goto noswap;
1006
1007 if (n_goal > SWAP_BATCH)
1008 n_goal = SWAP_BATCH;
1009
1010 if (n_goal > avail_pgs)
1011 n_goal = avail_pgs;
1012
1013 atomic_long_sub(n_goal * size, &nr_swap_pages);
1014
1015 spin_lock(&swap_avail_lock);
1016
1017start_over:
1018 node = numa_node_id();
1019 plist_for_each_entry_safe(si, next, &swap_avail_heads[node], avail_lists[node]) {
1020
1021 plist_requeue(&si->avail_lists[node], &swap_avail_heads[node]);
1022 spin_unlock(&swap_avail_lock);
1023 spin_lock(&si->lock);
1024 if (!si->highest_bit || !(si->flags & SWP_WRITEOK)) {
1025 spin_lock(&swap_avail_lock);
1026 if (plist_node_empty(&si->avail_lists[node])) {
1027 spin_unlock(&si->lock);
1028 goto nextsi;
1029 }
1030 WARN(!si->highest_bit,
1031 "swap_info %d in list but !highest_bit\n",
1032 si->type);
1033 WARN(!(si->flags & SWP_WRITEOK),
1034 "swap_info %d in list but !SWP_WRITEOK\n",
1035 si->type);
1036 __del_from_avail_list(si);
1037 spin_unlock(&si->lock);
1038 goto nextsi;
1039 }
1040 if (size == SWAPFILE_CLUSTER) {
1041 if (!(si->flags & SWP_FS))
1042 n_ret = swap_alloc_cluster(si, swp_entries);
1043 } else
1044 n_ret = scan_swap_map_slots(si, SWAP_HAS_CACHE,
1045 n_goal, swp_entries);
1046 spin_unlock(&si->lock);
1047 if (n_ret || size == SWAPFILE_CLUSTER)
1048 goto check_out;
1049 pr_debug("scan_swap_map of si %d failed to find offset\n",
1050 si->type);
1051
1052 spin_lock(&swap_avail_lock);
1053nextsi:
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065 if (plist_node_empty(&next->avail_lists[node]))
1066 goto start_over;
1067 }
1068
1069 spin_unlock(&swap_avail_lock);
1070
1071check_out:
1072 if (n_ret < n_goal)
1073 atomic_long_add((long)(n_goal - n_ret) * size,
1074 &nr_swap_pages);
1075noswap:
1076 return n_ret;
1077}
1078
1079
1080swp_entry_t get_swap_page_of_type(int type)
1081{
1082 struct swap_info_struct *si = swap_type_to_swap_info(type);
1083 pgoff_t offset;
1084
1085 if (!si)
1086 goto fail;
1087
1088 spin_lock(&si->lock);
1089 if (si->flags & SWP_WRITEOK) {
1090 atomic_long_dec(&nr_swap_pages);
1091
1092 offset = scan_swap_map(si, 1);
1093 if (offset) {
1094 spin_unlock(&si->lock);
1095 return swp_entry(type, offset);
1096 }
1097 atomic_long_inc(&nr_swap_pages);
1098 }
1099 spin_unlock(&si->lock);
1100fail:
1101 return (swp_entry_t) {0};
1102}
1103
1104static struct swap_info_struct *__swap_info_get(swp_entry_t entry)
1105{
1106 struct swap_info_struct *p;
1107 unsigned long offset;
1108
1109 if (!entry.val)
1110 goto out;
1111 p = swp_swap_info(entry);
1112 if (!p)
1113 goto bad_nofile;
1114 if (!(p->flags & SWP_USED))
1115 goto bad_device;
1116 offset = swp_offset(entry);
1117 if (offset >= p->max)
1118 goto bad_offset;
1119 return p;
1120
1121bad_offset:
1122 pr_err("swap_info_get: %s%08lx\n", Bad_offset, entry.val);
1123 goto out;
1124bad_device:
1125 pr_err("swap_info_get: %s%08lx\n", Unused_file, entry.val);
1126 goto out;
1127bad_nofile:
1128 pr_err("swap_info_get: %s%08lx\n", Bad_file, entry.val);
1129out:
1130 return NULL;
1131}
1132
1133static struct swap_info_struct *_swap_info_get(swp_entry_t entry)
1134{
1135 struct swap_info_struct *p;
1136
1137 p = __swap_info_get(entry);
1138 if (!p)
1139 goto out;
1140 if (!p->swap_map[swp_offset(entry)])
1141 goto bad_free;
1142 return p;
1143
1144bad_free:
1145 pr_err("swap_info_get: %s%08lx\n", Unused_offset, entry.val);
1146 goto out;
1147out:
1148 return NULL;
1149}
1150
1151static struct swap_info_struct *swap_info_get(swp_entry_t entry)
1152{
1153 struct swap_info_struct *p;
1154
1155 p = _swap_info_get(entry);
1156 if (p)
1157 spin_lock(&p->lock);
1158 return p;
1159}
1160
1161static struct swap_info_struct *swap_info_get_cont(swp_entry_t entry,
1162 struct swap_info_struct *q)
1163{
1164 struct swap_info_struct *p;
1165
1166 p = _swap_info_get(entry);
1167
1168 if (p != q) {
1169 if (q != NULL)
1170 spin_unlock(&q->lock);
1171 if (p != NULL)
1172 spin_lock(&p->lock);
1173 }
1174 return p;
1175}
1176
1177static unsigned char __swap_entry_free_locked(struct swap_info_struct *p,
1178 unsigned long offset,
1179 unsigned char usage)
1180{
1181 unsigned char count;
1182 unsigned char has_cache;
1183
1184 count = p->swap_map[offset];
1185
1186 has_cache = count & SWAP_HAS_CACHE;
1187 count &= ~SWAP_HAS_CACHE;
1188
1189 if (usage == SWAP_HAS_CACHE) {
1190 VM_BUG_ON(!has_cache);
1191 has_cache = 0;
1192 } else if (count == SWAP_MAP_SHMEM) {
1193
1194
1195
1196
1197 count = 0;
1198 } else if ((count & ~COUNT_CONTINUED) <= SWAP_MAP_MAX) {
1199 if (count == COUNT_CONTINUED) {
1200 if (swap_count_continued(p, offset, count))
1201 count = SWAP_MAP_MAX | COUNT_CONTINUED;
1202 else
1203 count = SWAP_MAP_MAX;
1204 } else
1205 count--;
1206 }
1207
1208 usage = count | has_cache;
1209 p->swap_map[offset] = usage ? : SWAP_HAS_CACHE;
1210
1211 return usage;
1212}
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249struct swap_info_struct *get_swap_device(swp_entry_t entry)
1250{
1251 struct swap_info_struct *si;
1252 unsigned long offset;
1253
1254 if (!entry.val)
1255 goto out;
1256 si = swp_swap_info(entry);
1257 if (!si)
1258 goto bad_nofile;
1259
1260 rcu_read_lock();
1261 if (!(si->flags & SWP_VALID))
1262 goto unlock_out;
1263 offset = swp_offset(entry);
1264 if (offset >= si->max)
1265 goto unlock_out;
1266
1267 return si;
1268bad_nofile:
1269 pr_err("%s: %s%08lx\n", __func__, Bad_file, entry.val);
1270out:
1271 return NULL;
1272unlock_out:
1273 rcu_read_unlock();
1274 return NULL;
1275}
1276
1277static unsigned char __swap_entry_free(struct swap_info_struct *p,
1278 swp_entry_t entry, unsigned char usage)
1279{
1280 struct swap_cluster_info *ci;
1281 unsigned long offset = swp_offset(entry);
1282
1283 ci = lock_cluster_or_swap_info(p, offset);
1284 usage = __swap_entry_free_locked(p, offset, usage);
1285 unlock_cluster_or_swap_info(p, ci);
1286 if (!usage)
1287 free_swap_slot(entry);
1288
1289 return usage;
1290}
1291
1292static void swap_entry_free(struct swap_info_struct *p, swp_entry_t entry)
1293{
1294 struct swap_cluster_info *ci;
1295 unsigned long offset = swp_offset(entry);
1296 unsigned char count;
1297
1298 ci = lock_cluster(p, offset);
1299 count = p->swap_map[offset];
1300 VM_BUG_ON(count != SWAP_HAS_CACHE);
1301 p->swap_map[offset] = 0;
1302 dec_cluster_info_page(p, p->cluster_info, offset);
1303 unlock_cluster(ci);
1304
1305 mem_cgroup_uncharge_swap(entry, 1);
1306 swap_range_free(p, offset, 1);
1307}
1308
1309
1310
1311
1312
1313void swap_free(swp_entry_t entry)
1314{
1315 struct swap_info_struct *p;
1316
1317 p = _swap_info_get(entry);
1318 if (p)
1319 __swap_entry_free(p, entry, 1);
1320}
1321
1322
1323
1324
1325void put_swap_page(struct page *page, swp_entry_t entry)
1326{
1327 unsigned long offset = swp_offset(entry);
1328 unsigned long idx = offset / SWAPFILE_CLUSTER;
1329 struct swap_cluster_info *ci;
1330 struct swap_info_struct *si;
1331 unsigned char *map;
1332 unsigned int i, free_entries = 0;
1333 unsigned char val;
1334 int size = swap_entry_size(hpage_nr_pages(page));
1335
1336 si = _swap_info_get(entry);
1337 if (!si)
1338 return;
1339
1340 ci = lock_cluster_or_swap_info(si, offset);
1341 if (size == SWAPFILE_CLUSTER) {
1342 VM_BUG_ON(!cluster_is_huge(ci));
1343 map = si->swap_map + offset;
1344 for (i = 0; i < SWAPFILE_CLUSTER; i++) {
1345 val = map[i];
1346 VM_BUG_ON(!(val & SWAP_HAS_CACHE));
1347 if (val == SWAP_HAS_CACHE)
1348 free_entries++;
1349 }
1350 cluster_clear_huge(ci);
1351 if (free_entries == SWAPFILE_CLUSTER) {
1352 unlock_cluster_or_swap_info(si, ci);
1353 spin_lock(&si->lock);
1354 mem_cgroup_uncharge_swap(entry, SWAPFILE_CLUSTER);
1355 swap_free_cluster(si, idx);
1356 spin_unlock(&si->lock);
1357 return;
1358 }
1359 }
1360 for (i = 0; i < size; i++, entry.val++) {
1361 if (!__swap_entry_free_locked(si, offset + i, SWAP_HAS_CACHE)) {
1362 unlock_cluster_or_swap_info(si, ci);
1363 free_swap_slot(entry);
1364 if (i == size - 1)
1365 return;
1366 lock_cluster_or_swap_info(si, offset);
1367 }
1368 }
1369 unlock_cluster_or_swap_info(si, ci);
1370}
1371
1372#ifdef CONFIG_THP_SWAP
1373int split_swap_cluster(swp_entry_t entry)
1374{
1375 struct swap_info_struct *si;
1376 struct swap_cluster_info *ci;
1377 unsigned long offset = swp_offset(entry);
1378
1379 si = _swap_info_get(entry);
1380 if (!si)
1381 return -EBUSY;
1382 ci = lock_cluster(si, offset);
1383 cluster_clear_huge(ci);
1384 unlock_cluster(ci);
1385 return 0;
1386}
1387#endif
1388
1389static int swp_entry_cmp(const void *ent1, const void *ent2)
1390{
1391 const swp_entry_t *e1 = ent1, *e2 = ent2;
1392
1393 return (int)swp_type(*e1) - (int)swp_type(*e2);
1394}
1395
1396void swapcache_free_entries(swp_entry_t *entries, int n)
1397{
1398 struct swap_info_struct *p, *prev;
1399 int i;
1400
1401 if (n <= 0)
1402 return;
1403
1404 prev = NULL;
1405 p = NULL;
1406
1407
1408
1409
1410
1411
1412 if (nr_swapfiles > 1)
1413 sort(entries, n, sizeof(entries[0]), swp_entry_cmp, NULL);
1414 for (i = 0; i < n; ++i) {
1415 p = swap_info_get_cont(entries[i], prev);
1416 if (p)
1417 swap_entry_free(p, entries[i]);
1418 prev = p;
1419 }
1420 if (p)
1421 spin_unlock(&p->lock);
1422}
1423
1424
1425
1426
1427
1428
1429int page_swapcount(struct page *page)
1430{
1431 int count = 0;
1432 struct swap_info_struct *p;
1433 struct swap_cluster_info *ci;
1434 swp_entry_t entry;
1435 unsigned long offset;
1436
1437 entry.val = page_private(page);
1438 p = _swap_info_get(entry);
1439 if (p) {
1440 offset = swp_offset(entry);
1441 ci = lock_cluster_or_swap_info(p, offset);
1442 count = swap_count(p->swap_map[offset]);
1443 unlock_cluster_or_swap_info(p, ci);
1444 }
1445 return count;
1446}
1447
1448int __swap_count(swp_entry_t entry)
1449{
1450 struct swap_info_struct *si;
1451 pgoff_t offset = swp_offset(entry);
1452 int count = 0;
1453
1454 si = get_swap_device(entry);
1455 if (si) {
1456 count = swap_count(si->swap_map[offset]);
1457 put_swap_device(si);
1458 }
1459 return count;
1460}
1461
1462static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry)
1463{
1464 int count = 0;
1465 pgoff_t offset = swp_offset(entry);
1466 struct swap_cluster_info *ci;
1467
1468 ci = lock_cluster_or_swap_info(si, offset);
1469 count = swap_count(si->swap_map[offset]);
1470 unlock_cluster_or_swap_info(si, ci);
1471 return count;
1472}
1473
1474
1475
1476
1477
1478
1479int __swp_swapcount(swp_entry_t entry)
1480{
1481 int count = 0;
1482 struct swap_info_struct *si;
1483
1484 si = get_swap_device(entry);
1485 if (si) {
1486 count = swap_swapcount(si, entry);
1487 put_swap_device(si);
1488 }
1489 return count;
1490}
1491
1492
1493
1494
1495
1496int swp_swapcount(swp_entry_t entry)
1497{
1498 int count, tmp_count, n;
1499 struct swap_info_struct *p;
1500 struct swap_cluster_info *ci;
1501 struct page *page;
1502 pgoff_t offset;
1503 unsigned char *map;
1504
1505 p = _swap_info_get(entry);
1506 if (!p)
1507 return 0;
1508
1509 offset = swp_offset(entry);
1510
1511 ci = lock_cluster_or_swap_info(p, offset);
1512
1513 count = swap_count(p->swap_map[offset]);
1514 if (!(count & COUNT_CONTINUED))
1515 goto out;
1516
1517 count &= ~COUNT_CONTINUED;
1518 n = SWAP_MAP_MAX + 1;
1519
1520 page = vmalloc_to_page(p->swap_map + offset);
1521 offset &= ~PAGE_MASK;
1522 VM_BUG_ON(page_private(page) != SWP_CONTINUED);
1523
1524 do {
1525 page = list_next_entry(page, lru);
1526 map = kmap_atomic(page);
1527 tmp_count = map[offset];
1528 kunmap_atomic(map);
1529
1530 count += (tmp_count & ~COUNT_CONTINUED) * n;
1531 n *= (SWAP_CONT_MAX + 1);
1532 } while (tmp_count & COUNT_CONTINUED);
1533out:
1534 unlock_cluster_or_swap_info(p, ci);
1535 return count;
1536}
1537
1538static bool swap_page_trans_huge_swapped(struct swap_info_struct *si,
1539 swp_entry_t entry)
1540{
1541 struct swap_cluster_info *ci;
1542 unsigned char *map = si->swap_map;
1543 unsigned long roffset = swp_offset(entry);
1544 unsigned long offset = round_down(roffset, SWAPFILE_CLUSTER);
1545 int i;
1546 bool ret = false;
1547
1548 ci = lock_cluster_or_swap_info(si, offset);
1549 if (!ci || !cluster_is_huge(ci)) {
1550 if (swap_count(map[roffset]))
1551 ret = true;
1552 goto unlock_out;
1553 }
1554 for (i = 0; i < SWAPFILE_CLUSTER; i++) {
1555 if (swap_count(map[offset + i])) {
1556 ret = true;
1557 break;
1558 }
1559 }
1560unlock_out:
1561 unlock_cluster_or_swap_info(si, ci);
1562 return ret;
1563}
1564
1565static bool page_swapped(struct page *page)
1566{
1567 swp_entry_t entry;
1568 struct swap_info_struct *si;
1569
1570 if (!IS_ENABLED(CONFIG_THP_SWAP) || likely(!PageTransCompound(page)))
1571 return page_swapcount(page) != 0;
1572
1573 page = compound_head(page);
1574 entry.val = page_private(page);
1575 si = _swap_info_get(entry);
1576 if (si)
1577 return swap_page_trans_huge_swapped(si, entry);
1578 return false;
1579}
1580
1581static int page_trans_huge_map_swapcount(struct page *page, int *total_mapcount,
1582 int *total_swapcount)
1583{
1584 int i, map_swapcount, _total_mapcount, _total_swapcount;
1585 unsigned long offset = 0;
1586 struct swap_info_struct *si;
1587 struct swap_cluster_info *ci = NULL;
1588 unsigned char *map = NULL;
1589 int mapcount, swapcount = 0;
1590
1591
1592 VM_BUG_ON_PAGE(PageHuge(page), page);
1593
1594 if (!IS_ENABLED(CONFIG_THP_SWAP) || likely(!PageTransCompound(page))) {
1595 mapcount = page_trans_huge_mapcount(page, total_mapcount);
1596 if (PageSwapCache(page))
1597 swapcount = page_swapcount(page);
1598 if (total_swapcount)
1599 *total_swapcount = swapcount;
1600 return mapcount + swapcount;
1601 }
1602
1603 page = compound_head(page);
1604
1605 _total_mapcount = _total_swapcount = map_swapcount = 0;
1606 if (PageSwapCache(page)) {
1607 swp_entry_t entry;
1608
1609 entry.val = page_private(page);
1610 si = _swap_info_get(entry);
1611 if (si) {
1612 map = si->swap_map;
1613 offset = swp_offset(entry);
1614 }
1615 }
1616 if (map)
1617 ci = lock_cluster(si, offset);
1618 for (i = 0; i < HPAGE_PMD_NR; i++) {
1619 mapcount = atomic_read(&page[i]._mapcount) + 1;
1620 _total_mapcount += mapcount;
1621 if (map) {
1622 swapcount = swap_count(map[offset + i]);
1623 _total_swapcount += swapcount;
1624 }
1625 map_swapcount = max(map_swapcount, mapcount + swapcount);
1626 }
1627 unlock_cluster(ci);
1628 if (PageDoubleMap(page)) {
1629 map_swapcount -= 1;
1630 _total_mapcount -= HPAGE_PMD_NR;
1631 }
1632 mapcount = compound_mapcount(page);
1633 map_swapcount += mapcount;
1634 _total_mapcount += mapcount;
1635 if (total_mapcount)
1636 *total_mapcount = _total_mapcount;
1637 if (total_swapcount)
1638 *total_swapcount = _total_swapcount;
1639
1640 return map_swapcount;
1641}
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653bool reuse_swap_page(struct page *page, int *total_map_swapcount)
1654{
1655 int count, total_mapcount, total_swapcount;
1656
1657 VM_BUG_ON_PAGE(!PageLocked(page), page);
1658 if (unlikely(PageKsm(page)))
1659 return false;
1660 count = page_trans_huge_map_swapcount(page, &total_mapcount,
1661 &total_swapcount);
1662 if (total_map_swapcount)
1663 *total_map_swapcount = total_mapcount + total_swapcount;
1664 if (count == 1 && PageSwapCache(page) &&
1665 (likely(!PageTransCompound(page)) ||
1666
1667 total_swapcount == page_swapcount(page))) {
1668 if (!PageWriteback(page)) {
1669 page = compound_head(page);
1670 delete_from_swap_cache(page);
1671 SetPageDirty(page);
1672 } else {
1673 swp_entry_t entry;
1674 struct swap_info_struct *p;
1675
1676 entry.val = page_private(page);
1677 p = swap_info_get(entry);
1678 if (p->flags & SWP_STABLE_WRITES) {
1679 spin_unlock(&p->lock);
1680 return false;
1681 }
1682 spin_unlock(&p->lock);
1683 }
1684 }
1685
1686 return count <= 1;
1687}
1688
1689
1690
1691
1692
1693int try_to_free_swap(struct page *page)
1694{
1695 VM_BUG_ON_PAGE(!PageLocked(page), page);
1696
1697 if (!PageSwapCache(page))
1698 return 0;
1699 if (PageWriteback(page))
1700 return 0;
1701 if (page_swapped(page))
1702 return 0;
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719 if (pm_suspended_storage())
1720 return 0;
1721
1722 page = compound_head(page);
1723 delete_from_swap_cache(page);
1724 SetPageDirty(page);
1725 return 1;
1726}
1727
1728
1729
1730
1731
1732int free_swap_and_cache(swp_entry_t entry)
1733{
1734 struct swap_info_struct *p;
1735 unsigned char count;
1736
1737 if (non_swap_entry(entry))
1738 return 1;
1739
1740 p = _swap_info_get(entry);
1741 if (p) {
1742 count = __swap_entry_free(p, entry, 1);
1743 if (count == SWAP_HAS_CACHE &&
1744 !swap_page_trans_huge_swapped(p, entry))
1745 __try_to_reclaim_swap(p, swp_offset(entry),
1746 TTRS_UNMAPPED | TTRS_FULL);
1747 }
1748 return p != NULL;
1749}
1750
1751#ifdef CONFIG_HIBERNATION
1752
1753
1754
1755
1756
1757
1758
1759
1760int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p)
1761{
1762 struct block_device *bdev = NULL;
1763 int type;
1764
1765 if (device)
1766 bdev = bdget(device);
1767
1768 spin_lock(&swap_lock);
1769 for (type = 0; type < nr_swapfiles; type++) {
1770 struct swap_info_struct *sis = swap_info[type];
1771
1772 if (!(sis->flags & SWP_WRITEOK))
1773 continue;
1774
1775 if (!bdev) {
1776 if (bdev_p)
1777 *bdev_p = bdgrab(sis->bdev);
1778
1779 spin_unlock(&swap_lock);
1780 return type;
1781 }
1782 if (bdev == sis->bdev) {
1783 struct swap_extent *se = first_se(sis);
1784
1785 if (se->start_block == offset) {
1786 if (bdev_p)
1787 *bdev_p = bdgrab(sis->bdev);
1788
1789 spin_unlock(&swap_lock);
1790 bdput(bdev);
1791 return type;
1792 }
1793 }
1794 }
1795 spin_unlock(&swap_lock);
1796 if (bdev)
1797 bdput(bdev);
1798
1799 return -ENODEV;
1800}
1801
1802
1803
1804
1805
1806sector_t swapdev_block(int type, pgoff_t offset)
1807{
1808 struct block_device *bdev;
1809 struct swap_info_struct *si = swap_type_to_swap_info(type);
1810
1811 if (!si || !(si->flags & SWP_WRITEOK))
1812 return 0;
1813 return map_swap_entry(swp_entry(type, offset), &bdev);
1814}
1815
1816
1817
1818
1819
1820
1821
1822unsigned int count_swap_pages(int type, int free)
1823{
1824 unsigned int n = 0;
1825
1826 spin_lock(&swap_lock);
1827 if ((unsigned int)type < nr_swapfiles) {
1828 struct swap_info_struct *sis = swap_info[type];
1829
1830 spin_lock(&sis->lock);
1831 if (sis->flags & SWP_WRITEOK) {
1832 n = sis->pages;
1833 if (free)
1834 n -= sis->inuse_pages;
1835 }
1836 spin_unlock(&sis->lock);
1837 }
1838 spin_unlock(&swap_lock);
1839 return n;
1840}
1841#endif
1842
1843static inline int pte_same_as_swp(pte_t pte, pte_t swp_pte)
1844{
1845 return pte_same(pte_swp_clear_soft_dirty(pte), swp_pte);
1846}
1847
1848
1849
1850
1851
1852
1853static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,
1854 unsigned long addr, swp_entry_t entry, struct page *page)
1855{
1856 struct page *swapcache;
1857 struct mem_cgroup *memcg;
1858 spinlock_t *ptl;
1859 pte_t *pte;
1860 int ret = 1;
1861
1862 swapcache = page;
1863 page = ksm_might_need_to_copy(page, vma, addr);
1864 if (unlikely(!page))
1865 return -ENOMEM;
1866
1867 if (mem_cgroup_try_charge(page, vma->vm_mm, GFP_KERNEL,
1868 &memcg, false)) {
1869 ret = -ENOMEM;
1870 goto out_nolock;
1871 }
1872
1873 pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
1874 if (unlikely(!pte_same_as_swp(*pte, swp_entry_to_pte(entry)))) {
1875 mem_cgroup_cancel_charge(page, memcg, false);
1876 ret = 0;
1877 goto out;
1878 }
1879
1880 dec_mm_counter(vma->vm_mm, MM_SWAPENTS);
1881 inc_mm_counter(vma->vm_mm, MM_ANONPAGES);
1882 get_page(page);
1883 set_pte_at(vma->vm_mm, addr, pte,
1884 pte_mkold(mk_pte(page, vma->vm_page_prot)));
1885 if (page == swapcache) {
1886 page_add_anon_rmap(page, vma, addr, false);
1887 mem_cgroup_commit_charge(page, memcg, true, false);
1888 } else {
1889 page_add_new_anon_rmap(page, vma, addr, false);
1890 mem_cgroup_commit_charge(page, memcg, false, false);
1891 lru_cache_add_active_or_unevictable(page, vma);
1892 }
1893 swap_free(entry);
1894
1895
1896
1897
1898 activate_page(page);
1899out:
1900 pte_unmap_unlock(pte, ptl);
1901out_nolock:
1902 if (page != swapcache) {
1903 unlock_page(page);
1904 put_page(page);
1905 }
1906 return ret;
1907}
1908
1909static int unuse_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
1910 unsigned long addr, unsigned long end,
1911 unsigned int type, bool frontswap,
1912 unsigned long *fs_pages_to_unuse)
1913{
1914 struct page *page;
1915 swp_entry_t entry;
1916 pte_t *pte;
1917 struct swap_info_struct *si;
1918 unsigned long offset;
1919 int ret = 0;
1920 volatile unsigned char *swap_map;
1921
1922 si = swap_info[type];
1923 pte = pte_offset_map(pmd, addr);
1924 do {
1925 struct vm_fault vmf;
1926
1927 if (!is_swap_pte(*pte))
1928 continue;
1929
1930 entry = pte_to_swp_entry(*pte);
1931 if (swp_type(entry) != type)
1932 continue;
1933
1934 offset = swp_offset(entry);
1935 if (frontswap && !frontswap_test(si, offset))
1936 continue;
1937
1938 pte_unmap(pte);
1939 swap_map = &si->swap_map[offset];
1940 vmf.vma = vma;
1941 vmf.address = addr;
1942 vmf.pmd = pmd;
1943 page = swapin_readahead(entry, GFP_HIGHUSER_MOVABLE, &vmf);
1944 if (!page) {
1945 if (*swap_map == 0 || *swap_map == SWAP_MAP_BAD)
1946 goto try_next;
1947 return -ENOMEM;
1948 }
1949
1950 lock_page(page);
1951 wait_on_page_writeback(page);
1952 ret = unuse_pte(vma, pmd, addr, entry, page);
1953 if (ret < 0) {
1954 unlock_page(page);
1955 put_page(page);
1956 goto out;
1957 }
1958
1959 try_to_free_swap(page);
1960 unlock_page(page);
1961 put_page(page);
1962
1963 if (*fs_pages_to_unuse && !--(*fs_pages_to_unuse)) {
1964 ret = FRONTSWAP_PAGES_UNUSED;
1965 goto out;
1966 }
1967try_next:
1968 pte = pte_offset_map(pmd, addr);
1969 } while (pte++, addr += PAGE_SIZE, addr != end);
1970 pte_unmap(pte - 1);
1971
1972 ret = 0;
1973out:
1974 return ret;
1975}
1976
1977static inline int unuse_pmd_range(struct vm_area_struct *vma, pud_t *pud,
1978 unsigned long addr, unsigned long end,
1979 unsigned int type, bool frontswap,
1980 unsigned long *fs_pages_to_unuse)
1981{
1982 pmd_t *pmd;
1983 unsigned long next;
1984 int ret;
1985
1986 pmd = pmd_offset(pud, addr);
1987 do {
1988 cond_resched();
1989 next = pmd_addr_end(addr, end);
1990 if (pmd_none_or_trans_huge_or_clear_bad(pmd))
1991 continue;
1992 ret = unuse_pte_range(vma, pmd, addr, next, type,
1993 frontswap, fs_pages_to_unuse);
1994 if (ret)
1995 return ret;
1996 } while (pmd++, addr = next, addr != end);
1997 return 0;
1998}
1999
2000static inline int unuse_pud_range(struct vm_area_struct *vma, p4d_t *p4d,
2001 unsigned long addr, unsigned long end,
2002 unsigned int type, bool frontswap,
2003 unsigned long *fs_pages_to_unuse)
2004{
2005 pud_t *pud;
2006 unsigned long next;
2007 int ret;
2008
2009 pud = pud_offset(p4d, addr);
2010 do {
2011 next = pud_addr_end(addr, end);
2012 if (pud_none_or_clear_bad(pud))
2013 continue;
2014 ret = unuse_pmd_range(vma, pud, addr, next, type,
2015 frontswap, fs_pages_to_unuse);
2016 if (ret)
2017 return ret;
2018 } while (pud++, addr = next, addr != end);
2019 return 0;
2020}
2021
2022static inline int unuse_p4d_range(struct vm_area_struct *vma, pgd_t *pgd,
2023 unsigned long addr, unsigned long end,
2024 unsigned int type, bool frontswap,
2025 unsigned long *fs_pages_to_unuse)
2026{
2027 p4d_t *p4d;
2028 unsigned long next;
2029 int ret;
2030
2031 p4d = p4d_offset(pgd, addr);
2032 do {
2033 next = p4d_addr_end(addr, end);
2034 if (p4d_none_or_clear_bad(p4d))
2035 continue;
2036 ret = unuse_pud_range(vma, p4d, addr, next, type,
2037 frontswap, fs_pages_to_unuse);
2038 if (ret)
2039 return ret;
2040 } while (p4d++, addr = next, addr != end);
2041 return 0;
2042}
2043
2044static int unuse_vma(struct vm_area_struct *vma, unsigned int type,
2045 bool frontswap, unsigned long *fs_pages_to_unuse)
2046{
2047 pgd_t *pgd;
2048 unsigned long addr, end, next;
2049 int ret;
2050
2051 addr = vma->vm_start;
2052 end = vma->vm_end;
2053
2054 pgd = pgd_offset(vma->vm_mm, addr);
2055 do {
2056 next = pgd_addr_end(addr, end);
2057 if (pgd_none_or_clear_bad(pgd))
2058 continue;
2059 ret = unuse_p4d_range(vma, pgd, addr, next, type,
2060 frontswap, fs_pages_to_unuse);
2061 if (ret)
2062 return ret;
2063 } while (pgd++, addr = next, addr != end);
2064 return 0;
2065}
2066
2067static int unuse_mm(struct mm_struct *mm, unsigned int type,
2068 bool frontswap, unsigned long *fs_pages_to_unuse)
2069{
2070 struct vm_area_struct *vma;
2071 int ret = 0;
2072
2073 down_read(&mm->mmap_sem);
2074 for (vma = mm->mmap; vma; vma = vma->vm_next) {
2075 if (vma->anon_vma) {
2076 ret = unuse_vma(vma, type, frontswap,
2077 fs_pages_to_unuse);
2078 if (ret)
2079 break;
2080 }
2081 cond_resched();
2082 }
2083 up_read(&mm->mmap_sem);
2084 return ret;
2085}
2086
2087
2088
2089
2090
2091
2092static unsigned int find_next_to_unuse(struct swap_info_struct *si,
2093 unsigned int prev, bool frontswap)
2094{
2095 unsigned int i;
2096 unsigned char count;
2097
2098
2099
2100
2101
2102
2103
2104 for (i = prev + 1; i < si->max; i++) {
2105 count = READ_ONCE(si->swap_map[i]);
2106 if (count && swap_count(count) != SWAP_MAP_BAD)
2107 if (!frontswap || frontswap_test(si, i))
2108 break;
2109 if ((i % LATENCY_LIMIT) == 0)
2110 cond_resched();
2111 }
2112
2113 if (i == si->max)
2114 i = 0;
2115
2116 return i;
2117}
2118
2119
2120
2121
2122
2123int try_to_unuse(unsigned int type, bool frontswap,
2124 unsigned long pages_to_unuse)
2125{
2126 struct mm_struct *prev_mm;
2127 struct mm_struct *mm;
2128 struct list_head *p;
2129 int retval = 0;
2130 struct swap_info_struct *si = swap_info[type];
2131 struct page *page;
2132 swp_entry_t entry;
2133 unsigned int i;
2134
2135 if (!si->inuse_pages)
2136 return 0;
2137
2138 if (!frontswap)
2139 pages_to_unuse = 0;
2140
2141retry:
2142 retval = shmem_unuse(type, frontswap, &pages_to_unuse);
2143 if (retval)
2144 goto out;
2145
2146 prev_mm = &init_mm;
2147 mmget(prev_mm);
2148
2149 spin_lock(&mmlist_lock);
2150 p = &init_mm.mmlist;
2151 while (si->inuse_pages &&
2152 !signal_pending(current) &&
2153 (p = p->next) != &init_mm.mmlist) {
2154
2155 mm = list_entry(p, struct mm_struct, mmlist);
2156 if (!mmget_not_zero(mm))
2157 continue;
2158 spin_unlock(&mmlist_lock);
2159 mmput(prev_mm);
2160 prev_mm = mm;
2161 retval = unuse_mm(mm, type, frontswap, &pages_to_unuse);
2162
2163 if (retval) {
2164 mmput(prev_mm);
2165 goto out;
2166 }
2167
2168
2169
2170
2171
2172 cond_resched();
2173 spin_lock(&mmlist_lock);
2174 }
2175 spin_unlock(&mmlist_lock);
2176
2177 mmput(prev_mm);
2178
2179 i = 0;
2180 while (si->inuse_pages &&
2181 !signal_pending(current) &&
2182 (i = find_next_to_unuse(si, i, frontswap)) != 0) {
2183
2184 entry = swp_entry(type, i);
2185 page = find_get_page(swap_address_space(entry), i);
2186 if (!page)
2187 continue;
2188
2189
2190
2191
2192
2193
2194
2195 lock_page(page);
2196 wait_on_page_writeback(page);
2197 try_to_free_swap(page);
2198 unlock_page(page);
2199 put_page(page);
2200
2201
2202
2203
2204
2205
2206 if (pages_to_unuse && --pages_to_unuse == 0)
2207 goto out;
2208 }
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222 if (si->inuse_pages) {
2223 if (!signal_pending(current))
2224 goto retry;
2225 retval = -EINTR;
2226 }
2227out:
2228 return (retval == FRONTSWAP_PAGES_UNUSED) ? 0 : retval;
2229}
2230
2231
2232
2233
2234
2235
2236
2237static void drain_mmlist(void)
2238{
2239 struct list_head *p, *next;
2240 unsigned int type;
2241
2242 for (type = 0; type < nr_swapfiles; type++)
2243 if (swap_info[type]->inuse_pages)
2244 return;
2245 spin_lock(&mmlist_lock);
2246 list_for_each_safe(p, next, &init_mm.mmlist)
2247 list_del_init(p);
2248 spin_unlock(&mmlist_lock);
2249}
2250
2251
2252
2253
2254
2255
2256
2257static sector_t map_swap_entry(swp_entry_t entry, struct block_device **bdev)
2258{
2259 struct swap_info_struct *sis;
2260 struct swap_extent *se;
2261 pgoff_t offset;
2262
2263 sis = swp_swap_info(entry);
2264 *bdev = sis->bdev;
2265
2266 offset = swp_offset(entry);
2267 se = offset_to_swap_extent(sis, offset);
2268 return se->start_block + (offset - se->start_page);
2269}
2270
2271
2272
2273
2274sector_t map_swap_page(struct page *page, struct block_device **bdev)
2275{
2276 swp_entry_t entry;
2277 entry.val = page_private(page);
2278 return map_swap_entry(entry, bdev);
2279}
2280
2281
2282
2283
2284static void destroy_swap_extents(struct swap_info_struct *sis)
2285{
2286 while (!RB_EMPTY_ROOT(&sis->swap_extent_root)) {
2287 struct rb_node *rb = sis->swap_extent_root.rb_node;
2288 struct swap_extent *se = rb_entry(rb, struct swap_extent, rb_node);
2289
2290 rb_erase(rb, &sis->swap_extent_root);
2291 kfree(se);
2292 }
2293
2294 if (sis->flags & SWP_ACTIVATED) {
2295 struct file *swap_file = sis->swap_file;
2296 struct address_space *mapping = swap_file->f_mapping;
2297
2298 sis->flags &= ~SWP_ACTIVATED;
2299 if (mapping->a_ops->swap_deactivate)
2300 mapping->a_ops->swap_deactivate(swap_file);
2301 }
2302}
2303
2304
2305
2306
2307
2308
2309
2310int
2311add_swap_extent(struct swap_info_struct *sis, unsigned long start_page,
2312 unsigned long nr_pages, sector_t start_block)
2313{
2314 struct rb_node **link = &sis->swap_extent_root.rb_node, *parent = NULL;
2315 struct swap_extent *se;
2316 struct swap_extent *new_se;
2317
2318
2319
2320
2321
2322 while (*link) {
2323 parent = *link;
2324 link = &parent->rb_right;
2325 }
2326
2327 if (parent) {
2328 se = rb_entry(parent, struct swap_extent, rb_node);
2329 BUG_ON(se->start_page + se->nr_pages != start_page);
2330 if (se->start_block + se->nr_pages == start_block) {
2331
2332 se->nr_pages += nr_pages;
2333 return 0;
2334 }
2335 }
2336
2337
2338 new_se = kmalloc(sizeof(*se), GFP_KERNEL);
2339 if (new_se == NULL)
2340 return -ENOMEM;
2341 new_se->start_page = start_page;
2342 new_se->nr_pages = nr_pages;
2343 new_se->start_block = start_block;
2344
2345 rb_link_node(&new_se->rb_node, parent, link);
2346 rb_insert_color(&new_se->rb_node, &sis->swap_extent_root);
2347 return 1;
2348}
2349EXPORT_SYMBOL_GPL(add_swap_extent);
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382static int setup_swap_extents(struct swap_info_struct *sis, sector_t *span)
2383{
2384 struct file *swap_file = sis->swap_file;
2385 struct address_space *mapping = swap_file->f_mapping;
2386 struct inode *inode = mapping->host;
2387 int ret;
2388
2389 if (S_ISBLK(inode->i_mode)) {
2390 ret = add_swap_extent(sis, 0, sis->max, 0);
2391 *span = sis->pages;
2392 return ret;
2393 }
2394
2395 if (mapping->a_ops->swap_activate) {
2396 ret = mapping->a_ops->swap_activate(sis, swap_file, span);
2397 if (ret >= 0)
2398 sis->flags |= SWP_ACTIVATED;
2399 if (!ret) {
2400 sis->flags |= SWP_FS;
2401 ret = add_swap_extent(sis, 0, sis->max, 0);
2402 *span = sis->pages;
2403 }
2404 return ret;
2405 }
2406
2407 return generic_swapfile_activate(sis, swap_file, span);
2408}
2409
2410static int swap_node(struct swap_info_struct *p)
2411{
2412 struct block_device *bdev;
2413
2414 if (p->bdev)
2415 bdev = p->bdev;
2416 else
2417 bdev = p->swap_file->f_inode->i_sb->s_bdev;
2418
2419 return bdev ? bdev->bd_disk->node_id : NUMA_NO_NODE;
2420}
2421
2422static void setup_swap_info(struct swap_info_struct *p, int prio,
2423 unsigned char *swap_map,
2424 struct swap_cluster_info *cluster_info)
2425{
2426 int i;
2427
2428 if (prio >= 0)
2429 p->prio = prio;
2430 else
2431 p->prio = --least_priority;
2432
2433
2434
2435
2436 p->list.prio = -p->prio;
2437 for_each_node(i) {
2438 if (p->prio >= 0)
2439 p->avail_lists[i].prio = -p->prio;
2440 else {
2441 if (swap_node(p) == i)
2442 p->avail_lists[i].prio = 1;
2443 else
2444 p->avail_lists[i].prio = -p->prio;
2445 }
2446 }
2447 p->swap_map = swap_map;
2448 p->cluster_info = cluster_info;
2449}
2450
2451static void _enable_swap_info(struct swap_info_struct *p)
2452{
2453 p->flags |= SWP_WRITEOK | SWP_VALID;
2454 atomic_long_add(p->pages, &nr_swap_pages);
2455 total_swap_pages += p->pages;
2456
2457 assert_spin_locked(&swap_lock);
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468 plist_add(&p->list, &swap_active_head);
2469 add_to_avail_list(p);
2470}
2471
2472static void enable_swap_info(struct swap_info_struct *p, int prio,
2473 unsigned char *swap_map,
2474 struct swap_cluster_info *cluster_info,
2475 unsigned long *frontswap_map)
2476{
2477 frontswap_init(p->type, frontswap_map);
2478 spin_lock(&swap_lock);
2479 spin_lock(&p->lock);
2480 setup_swap_info(p, prio, swap_map, cluster_info);
2481 spin_unlock(&p->lock);
2482 spin_unlock(&swap_lock);
2483
2484
2485
2486
2487 synchronize_rcu();
2488 spin_lock(&swap_lock);
2489 spin_lock(&p->lock);
2490 _enable_swap_info(p);
2491 spin_unlock(&p->lock);
2492 spin_unlock(&swap_lock);
2493}
2494
2495static void reinsert_swap_info(struct swap_info_struct *p)
2496{
2497 spin_lock(&swap_lock);
2498 spin_lock(&p->lock);
2499 setup_swap_info(p, p->prio, p->swap_map, p->cluster_info);
2500 _enable_swap_info(p);
2501 spin_unlock(&p->lock);
2502 spin_unlock(&swap_lock);
2503}
2504
2505bool has_usable_swap(void)
2506{
2507 bool ret = true;
2508
2509 spin_lock(&swap_lock);
2510 if (plist_head_empty(&swap_active_head))
2511 ret = false;
2512 spin_unlock(&swap_lock);
2513 return ret;
2514}
2515
2516SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
2517{
2518 struct swap_info_struct *p = NULL;
2519 unsigned char *swap_map;
2520 struct swap_cluster_info *cluster_info;
2521 unsigned long *frontswap_map;
2522 struct file *swap_file, *victim;
2523 struct address_space *mapping;
2524 struct inode *inode;
2525 struct filename *pathname;
2526 int err, found = 0;
2527 unsigned int old_block_size;
2528
2529 if (!capable(CAP_SYS_ADMIN))
2530 return -EPERM;
2531
2532 BUG_ON(!current->mm);
2533
2534 pathname = getname(specialfile);
2535 if (IS_ERR(pathname))
2536 return PTR_ERR(pathname);
2537
2538 victim = file_open_name(pathname, O_RDWR|O_LARGEFILE, 0);
2539 err = PTR_ERR(victim);
2540 if (IS_ERR(victim))
2541 goto out;
2542
2543 mapping = victim->f_mapping;
2544 spin_lock(&swap_lock);
2545 plist_for_each_entry(p, &swap_active_head, list) {
2546 if (p->flags & SWP_WRITEOK) {
2547 if (p->swap_file->f_mapping == mapping) {
2548 found = 1;
2549 break;
2550 }
2551 }
2552 }
2553 if (!found) {
2554 err = -EINVAL;
2555 spin_unlock(&swap_lock);
2556 goto out_dput;
2557 }
2558 if (!security_vm_enough_memory_mm(current->mm, p->pages))
2559 vm_unacct_memory(p->pages);
2560 else {
2561 err = -ENOMEM;
2562 spin_unlock(&swap_lock);
2563 goto out_dput;
2564 }
2565 del_from_avail_list(p);
2566 spin_lock(&p->lock);
2567 if (p->prio < 0) {
2568 struct swap_info_struct *si = p;
2569 int nid;
2570
2571 plist_for_each_entry_continue(si, &swap_active_head, list) {
2572 si->prio++;
2573 si->list.prio--;
2574 for_each_node(nid) {
2575 if (si->avail_lists[nid].prio != 1)
2576 si->avail_lists[nid].prio--;
2577 }
2578 }
2579 least_priority++;
2580 }
2581 plist_del(&p->list, &swap_active_head);
2582 atomic_long_sub(p->pages, &nr_swap_pages);
2583 total_swap_pages -= p->pages;
2584 p->flags &= ~SWP_WRITEOK;
2585 spin_unlock(&p->lock);
2586 spin_unlock(&swap_lock);
2587
2588 disable_swap_slots_cache_lock();
2589
2590 set_current_oom_origin();
2591 err = try_to_unuse(p->type, false, 0);
2592 clear_current_oom_origin();
2593
2594 if (err) {
2595
2596 reinsert_swap_info(p);
2597 reenable_swap_slots_cache_unlock();
2598 goto out_dput;
2599 }
2600
2601 reenable_swap_slots_cache_unlock();
2602
2603 spin_lock(&swap_lock);
2604 spin_lock(&p->lock);
2605 p->flags &= ~SWP_VALID;
2606 spin_unlock(&p->lock);
2607 spin_unlock(&swap_lock);
2608
2609
2610
2611
2612 synchronize_rcu();
2613
2614 flush_work(&p->discard_work);
2615
2616 destroy_swap_extents(p);
2617 if (p->flags & SWP_CONTINUED)
2618 free_swap_count_continuations(p);
2619
2620 if (!p->bdev || !blk_queue_nonrot(bdev_get_queue(p->bdev)))
2621 atomic_dec(&nr_rotate_swap);
2622
2623 mutex_lock(&swapon_mutex);
2624 spin_lock(&swap_lock);
2625 spin_lock(&p->lock);
2626 drain_mmlist();
2627
2628
2629 p->highest_bit = 0;
2630 while (p->flags >= SWP_SCANNING) {
2631 spin_unlock(&p->lock);
2632 spin_unlock(&swap_lock);
2633 schedule_timeout_uninterruptible(1);
2634 spin_lock(&swap_lock);
2635 spin_lock(&p->lock);
2636 }
2637
2638 swap_file = p->swap_file;
2639 old_block_size = p->old_block_size;
2640 p->swap_file = NULL;
2641 p->max = 0;
2642 swap_map = p->swap_map;
2643 p->swap_map = NULL;
2644 cluster_info = p->cluster_info;
2645 p->cluster_info = NULL;
2646 frontswap_map = frontswap_map_get(p);
2647 spin_unlock(&p->lock);
2648 spin_unlock(&swap_lock);
2649 frontswap_invalidate_area(p->type);
2650 frontswap_map_set(p, NULL);
2651 mutex_unlock(&swapon_mutex);
2652 free_percpu(p->percpu_cluster);
2653 p->percpu_cluster = NULL;
2654 vfree(swap_map);
2655 kvfree(cluster_info);
2656 kvfree(frontswap_map);
2657
2658 swap_cgroup_swapoff(p->type);
2659 exit_swap_address_space(p->type);
2660
2661 inode = mapping->host;
2662 if (S_ISBLK(inode->i_mode)) {
2663 struct block_device *bdev = I_BDEV(inode);
2664 set_blocksize(bdev, old_block_size);
2665 blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
2666 } else {
2667 inode_lock(inode);
2668 inode->i_flags &= ~S_SWAPFILE;
2669 inode_unlock(inode);
2670 }
2671 filp_close(swap_file, NULL);
2672
2673
2674
2675
2676
2677
2678 spin_lock(&swap_lock);
2679 p->flags = 0;
2680 spin_unlock(&swap_lock);
2681
2682 err = 0;
2683 atomic_inc(&proc_poll_event);
2684 wake_up_interruptible(&proc_poll_wait);
2685
2686out_dput:
2687 filp_close(victim, NULL);
2688out:
2689 putname(pathname);
2690 return err;
2691}
2692
2693#ifdef CONFIG_PROC_FS
2694static __poll_t swaps_poll(struct file *file, poll_table *wait)
2695{
2696 struct seq_file *seq = file->private_data;
2697
2698 poll_wait(file, &proc_poll_wait, wait);
2699
2700 if (seq->poll_event != atomic_read(&proc_poll_event)) {
2701 seq->poll_event = atomic_read(&proc_poll_event);
2702 return EPOLLIN | EPOLLRDNORM | EPOLLERR | EPOLLPRI;
2703 }
2704
2705 return EPOLLIN | EPOLLRDNORM;
2706}
2707
2708
2709static void *swap_start(struct seq_file *swap, loff_t *pos)
2710{
2711 struct swap_info_struct *si;
2712 int type;
2713 loff_t l = *pos;
2714
2715 mutex_lock(&swapon_mutex);
2716
2717 if (!l)
2718 return SEQ_START_TOKEN;
2719
2720 for (type = 0; (si = swap_type_to_swap_info(type)); type++) {
2721 if (!(si->flags & SWP_USED) || !si->swap_map)
2722 continue;
2723 if (!--l)
2724 return si;
2725 }
2726
2727 return NULL;
2728}
2729
2730static void *swap_next(struct seq_file *swap, void *v, loff_t *pos)
2731{
2732 struct swap_info_struct *si = v;
2733 int type;
2734
2735 if (v == SEQ_START_TOKEN)
2736 type = 0;
2737 else
2738 type = si->type + 1;
2739
2740 for (; (si = swap_type_to_swap_info(type)); type++) {
2741 if (!(si->flags & SWP_USED) || !si->swap_map)
2742 continue;
2743 ++*pos;
2744 return si;
2745 }
2746
2747 return NULL;
2748}
2749
2750static void swap_stop(struct seq_file *swap, void *v)
2751{
2752 mutex_unlock(&swapon_mutex);
2753}
2754
2755static int swap_show(struct seq_file *swap, void *v)
2756{
2757 struct swap_info_struct *si = v;
2758 struct file *file;
2759 int len;
2760
2761 if (si == SEQ_START_TOKEN) {
2762 seq_puts(swap,"Filename\t\t\t\tType\t\tSize\tUsed\tPriority\n");
2763 return 0;
2764 }
2765
2766 file = si->swap_file;
2767 len = seq_file_path(swap, file, " \t\n\\");
2768 seq_printf(swap, "%*s%s\t%u\t%u\t%d\n",
2769 len < 40 ? 40 - len : 1, " ",
2770 S_ISBLK(file_inode(file)->i_mode) ?
2771 "partition" : "file\t",
2772 si->pages << (PAGE_SHIFT - 10),
2773 si->inuse_pages << (PAGE_SHIFT - 10),
2774 si->prio);
2775 return 0;
2776}
2777
2778static const struct seq_operations swaps_op = {
2779 .start = swap_start,
2780 .next = swap_next,
2781 .stop = swap_stop,
2782 .show = swap_show
2783};
2784
2785static int swaps_open(struct inode *inode, struct file *file)
2786{
2787 struct seq_file *seq;
2788 int ret;
2789
2790 ret = seq_open(file, &swaps_op);
2791 if (ret)
2792 return ret;
2793
2794 seq = file->private_data;
2795 seq->poll_event = atomic_read(&proc_poll_event);
2796 return 0;
2797}
2798
2799static const struct file_operations proc_swaps_operations = {
2800 .open = swaps_open,
2801 .read = seq_read,
2802 .llseek = seq_lseek,
2803 .release = seq_release,
2804 .poll = swaps_poll,
2805};
2806
2807static int __init procswaps_init(void)
2808{
2809 proc_create("swaps", 0, NULL, &proc_swaps_operations);
2810 return 0;
2811}
2812__initcall(procswaps_init);
2813#endif
2814
2815#ifdef MAX_SWAPFILES_CHECK
2816static int __init max_swapfiles_check(void)
2817{
2818 MAX_SWAPFILES_CHECK();
2819 return 0;
2820}
2821late_initcall(max_swapfiles_check);
2822#endif
2823
2824static struct swap_info_struct *alloc_swap_info(void)
2825{
2826 struct swap_info_struct *p;
2827 unsigned int type;
2828 int i;
2829
2830 p = kvzalloc(struct_size(p, avail_lists, nr_node_ids), GFP_KERNEL);
2831 if (!p)
2832 return ERR_PTR(-ENOMEM);
2833
2834 spin_lock(&swap_lock);
2835 for (type = 0; type < nr_swapfiles; type++) {
2836 if (!(swap_info[type]->flags & SWP_USED))
2837 break;
2838 }
2839 if (type >= MAX_SWAPFILES) {
2840 spin_unlock(&swap_lock);
2841 kvfree(p);
2842 return ERR_PTR(-EPERM);
2843 }
2844 if (type >= nr_swapfiles) {
2845 p->type = type;
2846 WRITE_ONCE(swap_info[type], p);
2847
2848
2849
2850
2851
2852 smp_wmb();
2853 WRITE_ONCE(nr_swapfiles, nr_swapfiles + 1);
2854 } else {
2855 kvfree(p);
2856 p = swap_info[type];
2857
2858
2859
2860
2861 }
2862 p->swap_extent_root = RB_ROOT;
2863 plist_node_init(&p->list, 0);
2864 for_each_node(i)
2865 plist_node_init(&p->avail_lists[i], 0);
2866 p->flags = SWP_USED;
2867 spin_unlock(&swap_lock);
2868 spin_lock_init(&p->lock);
2869 spin_lock_init(&p->cont_lock);
2870
2871 return p;
2872}
2873
2874static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
2875{
2876 int error;
2877
2878 if (S_ISBLK(inode->i_mode)) {
2879 p->bdev = bdgrab(I_BDEV(inode));
2880 error = blkdev_get(p->bdev,
2881 FMODE_READ | FMODE_WRITE | FMODE_EXCL, p);
2882 if (error < 0) {
2883 p->bdev = NULL;
2884 return error;
2885 }
2886 p->old_block_size = block_size(p->bdev);
2887 error = set_blocksize(p->bdev, PAGE_SIZE);
2888 if (error < 0)
2889 return error;
2890 p->flags |= SWP_BLKDEV;
2891 } else if (S_ISREG(inode->i_mode)) {
2892 p->bdev = inode->i_sb->s_bdev;
2893 inode_lock(inode);
2894 if (IS_SWAPFILE(inode))
2895 return -EBUSY;
2896 } else
2897 return -EINVAL;
2898
2899 return 0;
2900}
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919unsigned long generic_max_swapfile_size(void)
2920{
2921 return swp_offset(pte_to_swp_entry(
2922 swp_entry_to_pte(swp_entry(0, ~0UL)))) + 1;
2923}
2924
2925
2926__weak unsigned long max_swapfile_size(void)
2927{
2928 return generic_max_swapfile_size();
2929}
2930
2931static unsigned long read_swap_header(struct swap_info_struct *p,
2932 union swap_header *swap_header,
2933 struct inode *inode)
2934{
2935 int i;
2936 unsigned long maxpages;
2937 unsigned long swapfilepages;
2938 unsigned long last_page;
2939
2940 if (memcmp("SWAPSPACE2", swap_header->magic.magic, 10)) {
2941 pr_err("Unable to find swap-space signature\n");
2942 return 0;
2943 }
2944
2945
2946 if (swab32(swap_header->info.version) == 1) {
2947 swab32s(&swap_header->info.version);
2948 swab32s(&swap_header->info.last_page);
2949 swab32s(&swap_header->info.nr_badpages);
2950 if (swap_header->info.nr_badpages > MAX_SWAP_BADPAGES)
2951 return 0;
2952 for (i = 0; i < swap_header->info.nr_badpages; i++)
2953 swab32s(&swap_header->info.badpages[i]);
2954 }
2955
2956 if (swap_header->info.version != 1) {
2957 pr_warn("Unable to handle swap header version %d\n",
2958 swap_header->info.version);
2959 return 0;
2960 }
2961
2962 p->lowest_bit = 1;
2963 p->cluster_next = 1;
2964 p->cluster_nr = 0;
2965
2966 maxpages = max_swapfile_size();
2967 last_page = swap_header->info.last_page;
2968 if (!last_page) {
2969 pr_warn("Empty swap-file\n");
2970 return 0;
2971 }
2972 if (last_page > maxpages) {
2973 pr_warn("Truncating oversized swap area, only using %luk out of %luk\n",
2974 maxpages << (PAGE_SHIFT - 10),
2975 last_page << (PAGE_SHIFT - 10));
2976 }
2977 if (maxpages > last_page) {
2978 maxpages = last_page + 1;
2979
2980 if ((unsigned int)maxpages == 0)
2981 maxpages = UINT_MAX;
2982 }
2983 p->highest_bit = maxpages - 1;
2984
2985 if (!maxpages)
2986 return 0;
2987 swapfilepages = i_size_read(inode) >> PAGE_SHIFT;
2988 if (swapfilepages && maxpages > swapfilepages) {
2989 pr_warn("Swap area shorter than signature indicates\n");
2990 return 0;
2991 }
2992 if (swap_header->info.nr_badpages && S_ISREG(inode->i_mode))
2993 return 0;
2994 if (swap_header->info.nr_badpages > MAX_SWAP_BADPAGES)
2995 return 0;
2996
2997 return maxpages;
2998}
2999
3000#define SWAP_CLUSTER_INFO_COLS \
3001 DIV_ROUND_UP(L1_CACHE_BYTES, sizeof(struct swap_cluster_info))
3002#define SWAP_CLUSTER_SPACE_COLS \
3003 DIV_ROUND_UP(SWAP_ADDRESS_SPACE_PAGES, SWAPFILE_CLUSTER)
3004#define SWAP_CLUSTER_COLS \
3005 max_t(unsigned int, SWAP_CLUSTER_INFO_COLS, SWAP_CLUSTER_SPACE_COLS)
3006
3007static int setup_swap_map_and_extents(struct swap_info_struct *p,
3008 union swap_header *swap_header,
3009 unsigned char *swap_map,
3010 struct swap_cluster_info *cluster_info,
3011 unsigned long maxpages,
3012 sector_t *span)
3013{
3014 unsigned int j, k;
3015 unsigned int nr_good_pages;
3016 int nr_extents;
3017 unsigned long nr_clusters = DIV_ROUND_UP(maxpages, SWAPFILE_CLUSTER);
3018 unsigned long col = p->cluster_next / SWAPFILE_CLUSTER % SWAP_CLUSTER_COLS;
3019 unsigned long i, idx;
3020
3021 nr_good_pages = maxpages - 1;
3022
3023 cluster_list_init(&p->free_clusters);
3024 cluster_list_init(&p->discard_clusters);
3025
3026 for (i = 0; i < swap_header->info.nr_badpages; i++) {
3027 unsigned int page_nr = swap_header->info.badpages[i];
3028 if (page_nr == 0 || page_nr > swap_header->info.last_page)
3029 return -EINVAL;
3030 if (page_nr < maxpages) {
3031 swap_map[page_nr] = SWAP_MAP_BAD;
3032 nr_good_pages--;
3033
3034
3035
3036
3037 inc_cluster_info_page(p, cluster_info, page_nr);
3038 }
3039 }
3040
3041
3042 for (i = maxpages; i < round_up(maxpages, SWAPFILE_CLUSTER); i++)
3043 inc_cluster_info_page(p, cluster_info, i);
3044
3045 if (nr_good_pages) {
3046 swap_map[0] = SWAP_MAP_BAD;
3047
3048
3049
3050
3051 inc_cluster_info_page(p, cluster_info, 0);
3052 p->max = maxpages;
3053 p->pages = nr_good_pages;
3054 nr_extents = setup_swap_extents(p, span);
3055 if (nr_extents < 0)
3056 return nr_extents;
3057 nr_good_pages = p->pages;
3058 }
3059 if (!nr_good_pages) {
3060 pr_warn("Empty swap-file\n");
3061 return -EINVAL;
3062 }
3063
3064 if (!cluster_info)
3065 return nr_extents;
3066
3067
3068
3069
3070
3071
3072 for (k = 0; k < SWAP_CLUSTER_COLS; k++) {
3073 j = (k + col) % SWAP_CLUSTER_COLS;
3074 for (i = 0; i < DIV_ROUND_UP(nr_clusters, SWAP_CLUSTER_COLS); i++) {
3075 idx = i * SWAP_CLUSTER_COLS + j;
3076 if (idx >= nr_clusters)
3077 continue;
3078 if (cluster_count(&cluster_info[idx]))
3079 continue;
3080 cluster_set_flag(&cluster_info[idx], CLUSTER_FLAG_FREE);
3081 cluster_list_add_tail(&p->free_clusters, cluster_info,
3082 idx);
3083 }
3084 }
3085 return nr_extents;
3086}
3087
3088
3089
3090
3091
3092static bool swap_discardable(struct swap_info_struct *si)
3093{
3094 struct request_queue *q = bdev_get_queue(si->bdev);
3095
3096 if (!q || !blk_queue_discard(q))
3097 return false;
3098
3099 return true;
3100}
3101
3102SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
3103{
3104 struct swap_info_struct *p;
3105 struct filename *name;
3106 struct file *swap_file = NULL;
3107 struct address_space *mapping;
3108 int prio;
3109 int error;
3110 union swap_header *swap_header;
3111 int nr_extents;
3112 sector_t span;
3113 unsigned long maxpages;
3114 unsigned char *swap_map = NULL;
3115 struct swap_cluster_info *cluster_info = NULL;
3116 unsigned long *frontswap_map = NULL;
3117 struct page *page = NULL;
3118 struct inode *inode = NULL;
3119 bool inced_nr_rotate_swap = false;
3120
3121 if (swap_flags & ~SWAP_FLAGS_VALID)
3122 return -EINVAL;
3123
3124 if (!capable(CAP_SYS_ADMIN))
3125 return -EPERM;
3126
3127 if (!swap_avail_heads)
3128 return -ENOMEM;
3129
3130 p = alloc_swap_info();
3131 if (IS_ERR(p))
3132 return PTR_ERR(p);
3133
3134 INIT_WORK(&p->discard_work, swap_discard_work);
3135
3136 name = getname(specialfile);
3137 if (IS_ERR(name)) {
3138 error = PTR_ERR(name);
3139 name = NULL;
3140 goto bad_swap;
3141 }
3142 swap_file = file_open_name(name, O_RDWR|O_LARGEFILE, 0);
3143 if (IS_ERR(swap_file)) {
3144 error = PTR_ERR(swap_file);
3145 swap_file = NULL;
3146 goto bad_swap;
3147 }
3148
3149 p->swap_file = swap_file;
3150 mapping = swap_file->f_mapping;
3151 inode = mapping->host;
3152
3153
3154 error = claim_swapfile(p, inode);
3155 if (unlikely(error))
3156 goto bad_swap;
3157
3158
3159
3160
3161 if (!mapping->a_ops->readpage) {
3162 error = -EINVAL;
3163 goto bad_swap;
3164 }
3165 page = read_mapping_page(mapping, 0, swap_file);
3166 if (IS_ERR(page)) {
3167 error = PTR_ERR(page);
3168 goto bad_swap;
3169 }
3170 swap_header = kmap(page);
3171
3172 maxpages = read_swap_header(p, swap_header, inode);
3173 if (unlikely(!maxpages)) {
3174 error = -EINVAL;
3175 goto bad_swap;
3176 }
3177
3178
3179 swap_map = vzalloc(maxpages);
3180 if (!swap_map) {
3181 error = -ENOMEM;
3182 goto bad_swap;
3183 }
3184
3185 if (bdi_cap_stable_pages_required(inode_to_bdi(inode)))
3186 p->flags |= SWP_STABLE_WRITES;
3187
3188 if (bdi_cap_synchronous_io(inode_to_bdi(inode)))
3189 p->flags |= SWP_SYNCHRONOUS_IO;
3190
3191 if (p->bdev && blk_queue_nonrot(bdev_get_queue(p->bdev))) {
3192 int cpu;
3193 unsigned long ci, nr_cluster;
3194
3195 p->flags |= SWP_SOLIDSTATE;
3196
3197
3198
3199
3200 p->cluster_next = 1 + (prandom_u32() % p->highest_bit);
3201 nr_cluster = DIV_ROUND_UP(maxpages, SWAPFILE_CLUSTER);
3202
3203 cluster_info = kvcalloc(nr_cluster, sizeof(*cluster_info),
3204 GFP_KERNEL);
3205 if (!cluster_info) {
3206 error = -ENOMEM;
3207 goto bad_swap;
3208 }
3209
3210 for (ci = 0; ci < nr_cluster; ci++)
3211 spin_lock_init(&((cluster_info + ci)->lock));
3212
3213 p->percpu_cluster = alloc_percpu(struct percpu_cluster);
3214 if (!p->percpu_cluster) {
3215 error = -ENOMEM;
3216 goto bad_swap;
3217 }
3218 for_each_possible_cpu(cpu) {
3219 struct percpu_cluster *cluster;
3220 cluster = per_cpu_ptr(p->percpu_cluster, cpu);
3221 cluster_set_null(&cluster->index);
3222 }
3223 } else {
3224 atomic_inc(&nr_rotate_swap);
3225 inced_nr_rotate_swap = true;
3226 }
3227
3228 error = swap_cgroup_swapon(p->type, maxpages);
3229 if (error)
3230 goto bad_swap;
3231
3232 nr_extents = setup_swap_map_and_extents(p, swap_header, swap_map,
3233 cluster_info, maxpages, &span);
3234 if (unlikely(nr_extents < 0)) {
3235 error = nr_extents;
3236 goto bad_swap;
3237 }
3238
3239 if (IS_ENABLED(CONFIG_FRONTSWAP))
3240 frontswap_map = kvcalloc(BITS_TO_LONGS(maxpages),
3241 sizeof(long),
3242 GFP_KERNEL);
3243
3244 if (p->bdev &&(swap_flags & SWAP_FLAG_DISCARD) && swap_discardable(p)) {
3245
3246
3247
3248
3249
3250
3251 p->flags |= (SWP_DISCARDABLE | SWP_AREA_DISCARD |
3252 SWP_PAGE_DISCARD);
3253
3254
3255
3256
3257
3258
3259
3260 if (swap_flags & SWAP_FLAG_DISCARD_ONCE)
3261 p->flags &= ~SWP_PAGE_DISCARD;
3262 else if (swap_flags & SWAP_FLAG_DISCARD_PAGES)
3263 p->flags &= ~SWP_AREA_DISCARD;
3264
3265
3266 if (p->flags & SWP_AREA_DISCARD) {
3267 int err = discard_swap(p);
3268 if (unlikely(err))
3269 pr_err("swapon: discard_swap(%p): %d\n",
3270 p, err);
3271 }
3272 }
3273
3274 error = init_swap_address_space(p->type, maxpages);
3275 if (error)
3276 goto bad_swap;
3277
3278 mutex_lock(&swapon_mutex);
3279 prio = -1;
3280 if (swap_flags & SWAP_FLAG_PREFER)
3281 prio =
3282 (swap_flags & SWAP_FLAG_PRIO_MASK) >> SWAP_FLAG_PRIO_SHIFT;
3283 enable_swap_info(p, prio, swap_map, cluster_info, frontswap_map);
3284
3285 pr_info("Adding %uk swap on %s. Priority:%d extents:%d across:%lluk %s%s%s%s%s\n",
3286 p->pages<<(PAGE_SHIFT-10), name->name, p->prio,
3287 nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10),
3288 (p->flags & SWP_SOLIDSTATE) ? "SS" : "",
3289 (p->flags & SWP_DISCARDABLE) ? "D" : "",
3290 (p->flags & SWP_AREA_DISCARD) ? "s" : "",
3291 (p->flags & SWP_PAGE_DISCARD) ? "c" : "",
3292 (frontswap_map) ? "FS" : "");
3293
3294 mutex_unlock(&swapon_mutex);
3295 atomic_inc(&proc_poll_event);
3296 wake_up_interruptible(&proc_poll_wait);
3297
3298 if (S_ISREG(inode->i_mode))
3299 inode->i_flags |= S_SWAPFILE;
3300 error = 0;
3301 goto out;
3302bad_swap:
3303 free_percpu(p->percpu_cluster);
3304 p->percpu_cluster = NULL;
3305 if (inode && S_ISBLK(inode->i_mode) && p->bdev) {
3306 set_blocksize(p->bdev, p->old_block_size);
3307 blkdev_put(p->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
3308 }
3309 destroy_swap_extents(p);
3310 swap_cgroup_swapoff(p->type);
3311 spin_lock(&swap_lock);
3312 p->swap_file = NULL;
3313 p->flags = 0;
3314 spin_unlock(&swap_lock);
3315 vfree(swap_map);
3316 kvfree(cluster_info);
3317 kvfree(frontswap_map);
3318 if (inced_nr_rotate_swap)
3319 atomic_dec(&nr_rotate_swap);
3320 if (swap_file) {
3321 if (inode && S_ISREG(inode->i_mode)) {
3322 inode_unlock(inode);
3323 inode = NULL;
3324 }
3325 filp_close(swap_file, NULL);
3326 }
3327out:
3328 if (page && !IS_ERR(page)) {
3329 kunmap(page);
3330 put_page(page);
3331 }
3332 if (name)
3333 putname(name);
3334 if (inode && S_ISREG(inode->i_mode))
3335 inode_unlock(inode);
3336 if (!error)
3337 enable_swap_slots_cache();
3338 return error;
3339}
3340
3341void si_swapinfo(struct sysinfo *val)
3342{
3343 unsigned int type;
3344 unsigned long nr_to_be_unused = 0;
3345
3346 spin_lock(&swap_lock);
3347 for (type = 0; type < nr_swapfiles; type++) {
3348 struct swap_info_struct *si = swap_info[type];
3349
3350 if ((si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK))
3351 nr_to_be_unused += si->inuse_pages;
3352 }
3353 val->freeswap = atomic_long_read(&nr_swap_pages) + nr_to_be_unused;
3354 val->totalswap = total_swap_pages + nr_to_be_unused;
3355 spin_unlock(&swap_lock);
3356}
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369static int __swap_duplicate(swp_entry_t entry, unsigned char usage)
3370{
3371 struct swap_info_struct *p;
3372 struct swap_cluster_info *ci;
3373 unsigned long offset;
3374 unsigned char count;
3375 unsigned char has_cache;
3376 int err = -EINVAL;
3377
3378 p = get_swap_device(entry);
3379 if (!p)
3380 goto out;
3381
3382 offset = swp_offset(entry);
3383 ci = lock_cluster_or_swap_info(p, offset);
3384
3385 count = p->swap_map[offset];
3386
3387
3388
3389
3390
3391 if (unlikely(swap_count(count) == SWAP_MAP_BAD)) {
3392 err = -ENOENT;
3393 goto unlock_out;
3394 }
3395
3396 has_cache = count & SWAP_HAS_CACHE;
3397 count &= ~SWAP_HAS_CACHE;
3398 err = 0;
3399
3400 if (usage == SWAP_HAS_CACHE) {
3401
3402
3403 if (!has_cache && count)
3404 has_cache = SWAP_HAS_CACHE;
3405 else if (has_cache)
3406 err = -EEXIST;
3407 else
3408 err = -ENOENT;
3409
3410 } else if (count || has_cache) {
3411
3412 if ((count & ~COUNT_CONTINUED) < SWAP_MAP_MAX)
3413 count += usage;
3414 else if ((count & ~COUNT_CONTINUED) > SWAP_MAP_MAX)
3415 err = -EINVAL;
3416 else if (swap_count_continued(p, offset, count))
3417 count = COUNT_CONTINUED;
3418 else
3419 err = -ENOMEM;
3420 } else
3421 err = -ENOENT;
3422
3423 p->swap_map[offset] = count | has_cache;
3424
3425unlock_out:
3426 unlock_cluster_or_swap_info(p, ci);
3427out:
3428 if (p)
3429 put_swap_device(p);
3430 return err;
3431}
3432
3433
3434
3435
3436
3437void swap_shmem_alloc(swp_entry_t entry)
3438{
3439 __swap_duplicate(entry, SWAP_MAP_SHMEM);
3440}
3441
3442
3443
3444
3445
3446
3447
3448
3449int swap_duplicate(swp_entry_t entry)
3450{
3451 int err = 0;
3452
3453 while (!err && __swap_duplicate(entry, 1) == -ENOMEM)
3454 err = add_swap_count_continuation(entry, GFP_ATOMIC);
3455 return err;
3456}
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466int swapcache_prepare(swp_entry_t entry)
3467{
3468 return __swap_duplicate(entry, SWAP_HAS_CACHE);
3469}
3470
3471struct swap_info_struct *swp_swap_info(swp_entry_t entry)
3472{
3473 return swap_type_to_swap_info(swp_type(entry));
3474}
3475
3476struct swap_info_struct *page_swap_info(struct page *page)
3477{
3478 swp_entry_t entry = { .val = page_private(page) };
3479 return swp_swap_info(entry);
3480}
3481
3482
3483
3484
3485struct address_space *__page_file_mapping(struct page *page)
3486{
3487 return page_swap_info(page)->swap_file->f_mapping;
3488}
3489EXPORT_SYMBOL_GPL(__page_file_mapping);
3490
3491pgoff_t __page_file_index(struct page *page)
3492{
3493 swp_entry_t swap = { .val = page_private(page) };
3494 return swp_offset(swap);
3495}
3496EXPORT_SYMBOL_GPL(__page_file_index);
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513int add_swap_count_continuation(swp_entry_t entry, gfp_t gfp_mask)
3514{
3515 struct swap_info_struct *si;
3516 struct swap_cluster_info *ci;
3517 struct page *head;
3518 struct page *page;
3519 struct page *list_page;
3520 pgoff_t offset;
3521 unsigned char count;
3522 int ret = 0;
3523
3524
3525
3526
3527
3528 page = alloc_page(gfp_mask | __GFP_HIGHMEM);
3529
3530 si = get_swap_device(entry);
3531 if (!si) {
3532
3533
3534
3535
3536 goto outer;
3537 }
3538 spin_lock(&si->lock);
3539
3540 offset = swp_offset(entry);
3541
3542 ci = lock_cluster(si, offset);
3543
3544 count = si->swap_map[offset] & ~SWAP_HAS_CACHE;
3545
3546 if ((count & ~COUNT_CONTINUED) != SWAP_MAP_MAX) {
3547
3548
3549
3550
3551
3552 goto out;
3553 }
3554
3555 if (!page) {
3556 ret = -ENOMEM;
3557 goto out;
3558 }
3559
3560
3561
3562
3563
3564
3565 head = vmalloc_to_page(si->swap_map + offset);
3566 offset &= ~PAGE_MASK;
3567
3568 spin_lock(&si->cont_lock);
3569
3570
3571
3572
3573 if (!page_private(head)) {
3574 BUG_ON(count & COUNT_CONTINUED);
3575 INIT_LIST_HEAD(&head->lru);
3576 set_page_private(head, SWP_CONTINUED);
3577 si->flags |= SWP_CONTINUED;
3578 }
3579
3580 list_for_each_entry(list_page, &head->lru, lru) {
3581 unsigned char *map;
3582
3583
3584
3585
3586
3587 if (!(count & COUNT_CONTINUED))
3588 goto out_unlock_cont;
3589
3590 map = kmap_atomic(list_page) + offset;
3591 count = *map;
3592 kunmap_atomic(map);
3593
3594
3595
3596
3597
3598 if ((count & ~COUNT_CONTINUED) != SWAP_CONT_MAX)
3599 goto out_unlock_cont;
3600 }
3601
3602 list_add_tail(&page->lru, &head->lru);
3603 page = NULL;
3604out_unlock_cont:
3605 spin_unlock(&si->cont_lock);
3606out:
3607 unlock_cluster(ci);
3608 spin_unlock(&si->lock);
3609 put_swap_device(si);
3610outer:
3611 if (page)
3612 __free_page(page);
3613 return ret;
3614}
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625static bool swap_count_continued(struct swap_info_struct *si,
3626 pgoff_t offset, unsigned char count)
3627{
3628 struct page *head;
3629 struct page *page;
3630 unsigned char *map;
3631 bool ret;
3632
3633 head = vmalloc_to_page(si->swap_map + offset);
3634 if (page_private(head) != SWP_CONTINUED) {
3635 BUG_ON(count & COUNT_CONTINUED);
3636 return false;
3637 }
3638
3639 spin_lock(&si->cont_lock);
3640 offset &= ~PAGE_MASK;
3641 page = list_entry(head->lru.next, struct page, lru);
3642 map = kmap_atomic(page) + offset;
3643
3644 if (count == SWAP_MAP_MAX)
3645 goto init_map;
3646
3647 if (count == (SWAP_MAP_MAX | COUNT_CONTINUED)) {
3648
3649
3650
3651 while (*map == (SWAP_CONT_MAX | COUNT_CONTINUED)) {
3652 kunmap_atomic(map);
3653 page = list_entry(page->lru.next, struct page, lru);
3654 BUG_ON(page == head);
3655 map = kmap_atomic(page) + offset;
3656 }
3657 if (*map == SWAP_CONT_MAX) {
3658 kunmap_atomic(map);
3659 page = list_entry(page->lru.next, struct page, lru);
3660 if (page == head) {
3661 ret = false;
3662 goto out;
3663 }
3664 map = kmap_atomic(page) + offset;
3665init_map: *map = 0;
3666 }
3667 *map += 1;
3668 kunmap_atomic(map);
3669 page = list_entry(page->lru.prev, struct page, lru);
3670 while (page != head) {
3671 map = kmap_atomic(page) + offset;
3672 *map = COUNT_CONTINUED;
3673 kunmap_atomic(map);
3674 page = list_entry(page->lru.prev, struct page, lru);
3675 }
3676 ret = true;
3677
3678 } else {
3679
3680
3681
3682 BUG_ON(count != COUNT_CONTINUED);
3683 while (*map == COUNT_CONTINUED) {
3684 kunmap_atomic(map);
3685 page = list_entry(page->lru.next, struct page, lru);
3686 BUG_ON(page == head);
3687 map = kmap_atomic(page) + offset;
3688 }
3689 BUG_ON(*map == 0);
3690 *map -= 1;
3691 if (*map == 0)
3692 count = 0;
3693 kunmap_atomic(map);
3694 page = list_entry(page->lru.prev, struct page, lru);
3695 while (page != head) {
3696 map = kmap_atomic(page) + offset;
3697 *map = SWAP_CONT_MAX | count;
3698 count = COUNT_CONTINUED;
3699 kunmap_atomic(map);
3700 page = list_entry(page->lru.prev, struct page, lru);
3701 }
3702 ret = count == COUNT_CONTINUED;
3703 }
3704out:
3705 spin_unlock(&si->cont_lock);
3706 return ret;
3707}
3708
3709
3710
3711
3712
3713static void free_swap_count_continuations(struct swap_info_struct *si)
3714{
3715 pgoff_t offset;
3716
3717 for (offset = 0; offset < si->max; offset += PAGE_SIZE) {
3718 struct page *head;
3719 head = vmalloc_to_page(si->swap_map + offset);
3720 if (page_private(head)) {
3721 struct page *page, *next;
3722
3723 list_for_each_entry_safe(page, next, &head->lru, lru) {
3724 list_del(&page->lru);
3725 __free_page(page);
3726 }
3727 }
3728 }
3729}
3730
3731#if defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP)
3732void mem_cgroup_throttle_swaprate(struct mem_cgroup *memcg, int node,
3733 gfp_t gfp_mask)
3734{
3735 struct swap_info_struct *si, *next;
3736 if (!(gfp_mask & __GFP_IO) || !memcg)
3737 return;
3738
3739 if (!blk_cgroup_congested())
3740 return;
3741
3742
3743
3744
3745
3746 if (current->throttle_queue)
3747 return;
3748
3749 spin_lock(&swap_avail_lock);
3750 plist_for_each_entry_safe(si, next, &swap_avail_heads[node],
3751 avail_lists[node]) {
3752 if (si->bdev) {
3753 blkcg_schedule_throttle(bdev_get_queue(si->bdev),
3754 true);
3755 break;
3756 }
3757 }
3758 spin_unlock(&swap_avail_lock);
3759}
3760#endif
3761
3762static int __init swapfile_init(void)
3763{
3764 int nid;
3765
3766 swap_avail_heads = kmalloc_array(nr_node_ids, sizeof(struct plist_head),
3767 GFP_KERNEL);
3768 if (!swap_avail_heads) {
3769 pr_emerg("Not enough memory for swap heads, swap is disabled\n");
3770 return -ENOMEM;
3771 }
3772
3773 for_each_node(nid)
3774 plist_head_init(&swap_avail_heads[nid]);
3775
3776 return 0;
3777}
3778subsys_initcall(swapfile_init);
3779