Lines Matching full:si
127 static int __try_to_reclaim_swap(struct swap_info_struct *si, in __try_to_reclaim_swap() argument
130 swp_entry_t entry = swp_entry(si->type, offset); in __try_to_reclaim_swap()
171 static int discard_swap(struct swap_info_struct *si) in discard_swap() argument
179 se = first_se(si); in discard_swap()
183 err = blkdev_issue_discard(si->bdev, start_block, in discard_swap()
194 err = blkdev_issue_discard(si->bdev, start_block, in discard_swap()
241 static void discard_swap_cluster(struct swap_info_struct *si, in discard_swap_cluster() argument
244 struct swap_extent *se = offset_to_swap_extent(si, start_page); in discard_swap_cluster()
258 if (blkdev_issue_discard(si->bdev, start_block, in discard_swap_cluster()
351 static inline struct swap_cluster_info *lock_cluster(struct swap_info_struct *si, in lock_cluster() argument
356 ci = si->cluster_info; in lock_cluster()
375 struct swap_info_struct *si, unsigned long offset) in lock_cluster_or_swap_info() argument
380 ci = lock_cluster(si, offset); in lock_cluster_or_swap_info()
383 spin_lock(&si->lock); in lock_cluster_or_swap_info()
388 static inline void unlock_cluster_or_swap_info(struct swap_info_struct *si, in unlock_cluster_or_swap_info() argument
394 spin_unlock(&si->lock); in unlock_cluster_or_swap_info()
453 static void swap_cluster_schedule_discard(struct swap_info_struct *si, in swap_cluster_schedule_discard() argument
458 * si->swap_map directly. To make sure the discarding cluster isn't in swap_cluster_schedule_discard()
462 memset(si->swap_map + idx * SWAPFILE_CLUSTER, in swap_cluster_schedule_discard()
465 cluster_list_add_tail(&si->discard_clusters, si->cluster_info, idx); in swap_cluster_schedule_discard()
467 schedule_work(&si->discard_work); in swap_cluster_schedule_discard()
470 static void __free_cluster(struct swap_info_struct *si, unsigned long idx) in __free_cluster() argument
472 struct swap_cluster_info *ci = si->cluster_info; in __free_cluster()
475 cluster_list_add_tail(&si->free_clusters, ci, idx); in __free_cluster()
480 * will be added to free cluster list. caller should hold si->lock.
482 static void swap_do_scheduled_discard(struct swap_info_struct *si) in swap_do_scheduled_discard() argument
487 info = si->cluster_info; in swap_do_scheduled_discard()
489 while (!cluster_list_empty(&si->discard_clusters)) { in swap_do_scheduled_discard()
490 idx = cluster_list_del_first(&si->discard_clusters, info); in swap_do_scheduled_discard()
491 spin_unlock(&si->lock); in swap_do_scheduled_discard()
493 discard_swap_cluster(si, idx * SWAPFILE_CLUSTER, in swap_do_scheduled_discard()
496 spin_lock(&si->lock); in swap_do_scheduled_discard()
497 ci = lock_cluster(si, idx * SWAPFILE_CLUSTER); in swap_do_scheduled_discard()
498 __free_cluster(si, idx); in swap_do_scheduled_discard()
499 memset(si->swap_map + idx * SWAPFILE_CLUSTER, in swap_do_scheduled_discard()
507 struct swap_info_struct *si; in swap_discard_work() local
509 si = container_of(work, struct swap_info_struct, discard_work); in swap_discard_work()
511 spin_lock(&si->lock); in swap_discard_work()
512 swap_do_scheduled_discard(si); in swap_discard_work()
513 spin_unlock(&si->lock); in swap_discard_work()
516 static void alloc_cluster(struct swap_info_struct *si, unsigned long idx) in alloc_cluster() argument
518 struct swap_cluster_info *ci = si->cluster_info; in alloc_cluster()
520 VM_BUG_ON(cluster_list_first(&si->free_clusters) != idx); in alloc_cluster()
521 cluster_list_del_first(&si->free_clusters, ci); in alloc_cluster()
525 static void free_cluster(struct swap_info_struct *si, unsigned long idx) in free_cluster() argument
527 struct swap_cluster_info *ci = si->cluster_info + idx; in free_cluster()
535 if ((si->flags & (SWP_WRITEOK | SWP_PAGE_DISCARD)) == in free_cluster()
537 swap_cluster_schedule_discard(si, idx); in free_cluster()
541 __free_cluster(si, idx); in free_cluster()
589 scan_swap_map_ssd_cluster_conflict(struct swap_info_struct *si, in scan_swap_map_ssd_cluster_conflict() argument
596 conflict = !cluster_list_empty(&si->free_clusters) && in scan_swap_map_ssd_cluster_conflict()
597 offset != cluster_list_first(&si->free_clusters) && in scan_swap_map_ssd_cluster_conflict()
598 cluster_is_free(&si->cluster_info[offset]); in scan_swap_map_ssd_cluster_conflict()
603 percpu_cluster = this_cpu_ptr(si->percpu_cluster); in scan_swap_map_ssd_cluster_conflict()
612 static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si, in scan_swap_map_try_ssd_cluster() argument
620 cluster = this_cpu_ptr(si->percpu_cluster); in scan_swap_map_try_ssd_cluster()
622 if (!cluster_list_empty(&si->free_clusters)) { in scan_swap_map_try_ssd_cluster()
623 cluster->index = si->free_clusters.head; in scan_swap_map_try_ssd_cluster()
626 } else if (!cluster_list_empty(&si->discard_clusters)) { in scan_swap_map_try_ssd_cluster()
630 * reread cluster_next_cpu since we dropped si->lock in scan_swap_map_try_ssd_cluster()
632 swap_do_scheduled_discard(si); in scan_swap_map_try_ssd_cluster()
633 *scan_base = this_cpu_read(*si->cluster_next_cpu); in scan_swap_map_try_ssd_cluster()
645 max = min_t(unsigned long, si->max, in scan_swap_map_try_ssd_cluster()
648 ci = lock_cluster(si, tmp); in scan_swap_map_try_ssd_cluster()
650 if (!si->swap_map[tmp]) in scan_swap_map_try_ssd_cluster()
682 static void swap_range_alloc(struct swap_info_struct *si, unsigned long offset, in swap_range_alloc() argument
687 if (offset == si->lowest_bit) in swap_range_alloc()
688 si->lowest_bit += nr_entries; in swap_range_alloc()
689 if (end == si->highest_bit) in swap_range_alloc()
690 WRITE_ONCE(si->highest_bit, si->highest_bit - nr_entries); in swap_range_alloc()
691 si->inuse_pages += nr_entries; in swap_range_alloc()
692 if (si->inuse_pages == si->pages) { in swap_range_alloc()
693 si->lowest_bit = si->max; in swap_range_alloc()
694 si->highest_bit = 0; in swap_range_alloc()
695 del_from_avail_list(si); in swap_range_alloc()
711 static void swap_range_free(struct swap_info_struct *si, unsigned long offset, in swap_range_free() argument
718 if (offset < si->lowest_bit) in swap_range_free()
719 si->lowest_bit = offset; in swap_range_free()
720 if (end > si->highest_bit) { in swap_range_free()
721 bool was_full = !si->highest_bit; in swap_range_free()
723 WRITE_ONCE(si->highest_bit, end); in swap_range_free()
724 if (was_full && (si->flags & SWP_WRITEOK)) in swap_range_free()
725 add_to_avail_list(si); in swap_range_free()
728 si->inuse_pages -= nr_entries; in swap_range_free()
729 if (si->flags & SWP_BLKDEV) in swap_range_free()
731 si->bdev->bd_disk->fops->swap_slot_free_notify; in swap_range_free()
735 arch_swap_invalidate_page(si->type, offset); in swap_range_free()
736 frontswap_invalidate_page(si->type, offset); in swap_range_free()
738 swap_slot_free_notify(si->bdev, offset); in swap_range_free()
741 clear_shadow_from_swap_cache(si->type, begin, end); in swap_range_free()
744 static void set_cluster_next(struct swap_info_struct *si, unsigned long next) in set_cluster_next() argument
748 if (!(si->flags & SWP_SOLIDSTATE)) { in set_cluster_next()
749 si->cluster_next = next; in set_cluster_next()
753 prev = this_cpu_read(*si->cluster_next_cpu); in set_cluster_next()
762 if (si->highest_bit <= si->lowest_bit) in set_cluster_next()
764 next = si->lowest_bit + in set_cluster_next()
765 prandom_u32_max(si->highest_bit - si->lowest_bit + 1); in set_cluster_next()
767 next = max_t(unsigned int, next, si->lowest_bit); in set_cluster_next()
769 this_cpu_write(*si->cluster_next_cpu, next); in set_cluster_next()
772 static int scan_swap_map_slots(struct swap_info_struct *si, in scan_swap_map_slots() argument
795 si->flags += SWP_SCANNING; in scan_swap_map_slots()
801 if (si->flags & SWP_SOLIDSTATE) in scan_swap_map_slots()
802 scan_base = this_cpu_read(*si->cluster_next_cpu); in scan_swap_map_slots()
804 scan_base = si->cluster_next; in scan_swap_map_slots()
808 if (si->cluster_info) { in scan_swap_map_slots()
809 if (!scan_swap_map_try_ssd_cluster(si, &offset, &scan_base)) in scan_swap_map_slots()
811 } else if (unlikely(!si->cluster_nr--)) { in scan_swap_map_slots()
812 if (si->pages - si->inuse_pages < SWAPFILE_CLUSTER) { in scan_swap_map_slots()
813 si->cluster_nr = SWAPFILE_CLUSTER - 1; in scan_swap_map_slots()
817 spin_unlock(&si->lock); in scan_swap_map_slots()
822 * If seek is cheap, that is the SWP_SOLIDSTATE si->cluster_info in scan_swap_map_slots()
825 scan_base = offset = si->lowest_bit; in scan_swap_map_slots()
829 for (; last_in_cluster <= si->highest_bit; offset++) { in scan_swap_map_slots()
830 if (si->swap_map[offset]) in scan_swap_map_slots()
833 spin_lock(&si->lock); in scan_swap_map_slots()
835 si->cluster_next = offset; in scan_swap_map_slots()
836 si->cluster_nr = SWAPFILE_CLUSTER - 1; in scan_swap_map_slots()
846 spin_lock(&si->lock); in scan_swap_map_slots()
847 si->cluster_nr = SWAPFILE_CLUSTER - 1; in scan_swap_map_slots()
851 if (si->cluster_info) { in scan_swap_map_slots()
852 while (scan_swap_map_ssd_cluster_conflict(si, offset)) { in scan_swap_map_slots()
856 if (!scan_swap_map_try_ssd_cluster(si, &offset, in scan_swap_map_slots()
861 if (!(si->flags & SWP_WRITEOK)) in scan_swap_map_slots()
863 if (!si->highest_bit) in scan_swap_map_slots()
865 if (offset > si->highest_bit) in scan_swap_map_slots()
866 scan_base = offset = si->lowest_bit; in scan_swap_map_slots()
868 ci = lock_cluster(si, offset); in scan_swap_map_slots()
870 if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) { in scan_swap_map_slots()
873 spin_unlock(&si->lock); in scan_swap_map_slots()
874 swap_was_freed = __try_to_reclaim_swap(si, offset, TTRS_ANYWAY); in scan_swap_map_slots()
875 spin_lock(&si->lock); in scan_swap_map_slots()
882 if (si->swap_map[offset]) { in scan_swap_map_slots()
889 WRITE_ONCE(si->swap_map[offset], usage); in scan_swap_map_slots()
890 inc_cluster_info_page(si, si->cluster_info, offset); in scan_swap_map_slots()
893 swap_range_alloc(si, offset, 1); in scan_swap_map_slots()
894 slots[n_ret++] = swp_entry(si->type, offset); in scan_swap_map_slots()
897 if ((n_ret == nr) || (offset >= si->highest_bit)) in scan_swap_map_slots()
906 spin_unlock(&si->lock); in scan_swap_map_slots()
908 spin_lock(&si->lock); in scan_swap_map_slots()
913 if (si->cluster_info) { in scan_swap_map_slots()
914 if (scan_swap_map_try_ssd_cluster(si, &offset, &scan_base)) in scan_swap_map_slots()
916 } else if (si->cluster_nr && !si->swap_map[++offset]) { in scan_swap_map_slots()
918 --si->cluster_nr; in scan_swap_map_slots()
933 scan_limit = si->highest_bit; in scan_swap_map_slots()
936 if (!si->swap_map[offset]) in scan_swap_map_slots()
942 set_cluster_next(si, offset + 1); in scan_swap_map_slots()
943 si->flags -= SWP_SCANNING; in scan_swap_map_slots()
947 spin_unlock(&si->lock); in scan_swap_map_slots()
948 while (++offset <= READ_ONCE(si->highest_bit)) { in scan_swap_map_slots()
949 if (data_race(!si->swap_map[offset])) { in scan_swap_map_slots()
950 spin_lock(&si->lock); in scan_swap_map_slots()
954 READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) { in scan_swap_map_slots()
955 spin_lock(&si->lock); in scan_swap_map_slots()
964 offset = si->lowest_bit; in scan_swap_map_slots()
966 if (data_race(!si->swap_map[offset])) { in scan_swap_map_slots()
967 spin_lock(&si->lock); in scan_swap_map_slots()
971 READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) { in scan_swap_map_slots()
972 spin_lock(&si->lock); in scan_swap_map_slots()
982 spin_lock(&si->lock); in scan_swap_map_slots()
985 si->flags -= SWP_SCANNING; in scan_swap_map_slots()
989 static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) in swap_alloc_cluster() argument
1005 if (cluster_list_empty(&si->free_clusters)) in swap_alloc_cluster()
1008 idx = cluster_list_first(&si->free_clusters); in swap_alloc_cluster()
1010 ci = lock_cluster(si, offset); in swap_alloc_cluster()
1011 alloc_cluster(si, idx); in swap_alloc_cluster()
1014 map = si->swap_map + offset; in swap_alloc_cluster()
1018 swap_range_alloc(si, offset, SWAPFILE_CLUSTER); in swap_alloc_cluster()
1019 *slot = swp_entry(si->type, offset); in swap_alloc_cluster()
1024 static void swap_free_cluster(struct swap_info_struct *si, unsigned long idx) in swap_free_cluster() argument
1029 ci = lock_cluster(si, offset); in swap_free_cluster()
1030 memset(si->swap_map + offset, 0, SWAPFILE_CLUSTER); in swap_free_cluster()
1032 free_cluster(si, idx); in swap_free_cluster()
1034 swap_range_free(si, offset, SWAPFILE_CLUSTER); in swap_free_cluster()
1037 static unsigned long scan_swap_map(struct swap_info_struct *si, in scan_swap_map() argument
1043 n_ret = scan_swap_map_slots(si, usage, 1, &entry); in scan_swap_map()
1055 struct swap_info_struct *si, *next; in get_swap_pages() local
1077 plist_for_each_entry_safe(si, next, &swap_avail_heads[node], avail_lists[node]) { in get_swap_pages()
1078 /* requeue si to after same-priority siblings */ in get_swap_pages()
1079 plist_requeue(&si->avail_lists[node], &swap_avail_heads[node]); in get_swap_pages()
1081 spin_lock(&si->lock); in get_swap_pages()
1082 if (!si->highest_bit || !(si->flags & SWP_WRITEOK)) { in get_swap_pages()
1084 if (plist_node_empty(&si->avail_lists[node])) { in get_swap_pages()
1085 spin_unlock(&si->lock); in get_swap_pages()
1088 WARN(!si->highest_bit, in get_swap_pages()
1090 si->type); in get_swap_pages()
1091 WARN(!(si->flags & SWP_WRITEOK), in get_swap_pages()
1093 si->type); in get_swap_pages()
1094 __del_from_avail_list(si); in get_swap_pages()
1095 spin_unlock(&si->lock); in get_swap_pages()
1099 if (si->flags & SWP_BLKDEV) in get_swap_pages()
1100 n_ret = swap_alloc_cluster(si, swp_entries); in get_swap_pages()
1102 n_ret = scan_swap_map_slots(si, SWAP_HAS_CACHE, in get_swap_pages()
1104 spin_unlock(&si->lock); in get_swap_pages()
1107 pr_debug("scan_swap_map of si %d failed to find offset\n", in get_swap_pages()
1108 si->type); in get_swap_pages()
1114 * if we got here, it's likely that si was almost full before, in get_swap_pages()
1115 * and since scan_swap_map() can drop the si->lock, multiple in get_swap_pages()
1116 * callers probably all tried to get a page from the same si in get_swap_pages()
1117 * and it filled up before we could get one; or, the si filled in get_swap_pages()
1118 * up between us dropping swap_avail_lock and taking si->lock. in get_swap_pages()
1141 struct swap_info_struct *si = swap_type_to_swap_info(type); in get_swap_page_of_type() local
1144 if (!si) in get_swap_page_of_type()
1147 spin_lock(&si->lock); in get_swap_page_of_type()
1148 if (si->flags & SWP_WRITEOK) { in get_swap_page_of_type()
1150 offset = scan_swap_map(si, 1); in get_swap_page_of_type()
1153 spin_unlock(&si->lock); in get_swap_page_of_type()
1157 spin_unlock(&si->lock); in get_swap_page_of_type()
1287 * enable_swap_info() or swapoff(). So if "si->flags & SWP_VALID" is
1288 * true, the si->map, si->cluster_info, etc. must be valid in the
1316 struct swap_info_struct *si; in get_swap_device() local
1321 si = swp_swap_info(entry); in get_swap_device()
1322 if (!si) in get_swap_device()
1326 if (data_race(!(si->flags & SWP_VALID))) in get_swap_device()
1329 if (offset >= si->max) in get_swap_device()
1332 return si; in get_swap_device()
1396 struct swap_info_struct *si; in put_swap_page() local
1402 si = _swap_info_get(entry); in put_swap_page()
1403 if (!si) in put_swap_page()
1406 ci = lock_cluster_or_swap_info(si, offset); in put_swap_page()
1409 map = si->swap_map + offset; in put_swap_page()
1418 unlock_cluster_or_swap_info(si, ci); in put_swap_page()
1419 spin_lock(&si->lock); in put_swap_page()
1421 swap_free_cluster(si, idx); in put_swap_page()
1422 spin_unlock(&si->lock); in put_swap_page()
1427 if (!__swap_entry_free_locked(si, offset + i, SWAP_HAS_CACHE)) { in put_swap_page()
1428 unlock_cluster_or_swap_info(si, ci); in put_swap_page()
1432 lock_cluster_or_swap_info(si, offset); in put_swap_page()
1435 unlock_cluster_or_swap_info(si, ci); in put_swap_page()
1441 struct swap_info_struct *si; in split_swap_cluster() local
1445 si = _swap_info_get(entry); in split_swap_cluster()
1446 if (!si) in split_swap_cluster()
1448 ci = lock_cluster(si, offset); in split_swap_cluster()
1516 struct swap_info_struct *si; in __swap_count() local
1520 si = get_swap_device(entry); in __swap_count()
1521 if (si) { in __swap_count()
1522 count = swap_count(si->swap_map[offset]); in __swap_count()
1523 put_swap_device(si); in __swap_count()
1528 static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) in swap_swapcount() argument
1534 ci = lock_cluster_or_swap_info(si, offset); in swap_swapcount()
1535 count = swap_count(si->swap_map[offset]); in swap_swapcount()
1536 unlock_cluster_or_swap_info(si, ci); in swap_swapcount()
1548 struct swap_info_struct *si; in __swp_swapcount() local
1550 si = get_swap_device(entry); in __swp_swapcount()
1551 if (si) { in __swp_swapcount()
1552 count = swap_swapcount(si, entry); in __swp_swapcount()
1553 put_swap_device(si); in __swp_swapcount()
1604 static bool swap_page_trans_huge_swapped(struct swap_info_struct *si, in swap_page_trans_huge_swapped() argument
1608 unsigned char *map = si->swap_map; in swap_page_trans_huge_swapped()
1614 ci = lock_cluster_or_swap_info(si, offset); in swap_page_trans_huge_swapped()
1627 unlock_cluster_or_swap_info(si, ci); in swap_page_trans_huge_swapped()
1634 struct swap_info_struct *si; in page_swapped() local
1641 si = _swap_info_get(entry); in page_swapped()
1642 if (si) in page_swapped()
1643 return swap_page_trans_huge_swapped(si, entry); in page_swapped()
1652 struct swap_info_struct *si; in page_trans_huge_map_swapcount() local
1676 si = _swap_info_get(entry); in page_trans_huge_map_swapcount()
1677 if (si) { in page_trans_huge_map_swapcount()
1678 map = si->swap_map; in page_trans_huge_map_swapcount()
1683 ci = lock_cluster(si, offset); in page_trans_huge_map_swapcount()
1884 struct swap_info_struct *si = swap_type_to_swap_info(type); in swapdev_block() local
1886 if (!si || !(si->flags & SWP_WRITEOK)) in swapdev_block()
1976 struct swap_info_struct *si; in unuse_pte_range() local
1981 si = swap_info[type]; in unuse_pte_range()
1994 if (frontswap && !frontswap_test(si, offset)) in unuse_pte_range()
1998 swap_map = &si->swap_map[offset]; in unuse_pte_range()
2155 static unsigned int find_next_to_unuse(struct swap_info_struct *si, in find_next_to_unuse() argument
2167 for (i = prev + 1; i < si->max; i++) { in find_next_to_unuse()
2168 count = READ_ONCE(si->swap_map[i]); in find_next_to_unuse()
2170 if (!frontswap || frontswap_test(si, i)) in find_next_to_unuse()
2176 if (i == si->max) in find_next_to_unuse()
2193 struct swap_info_struct *si = swap_info[type]; in try_to_unuse() local
2198 if (!READ_ONCE(si->inuse_pages)) in try_to_unuse()
2214 while (READ_ONCE(si->inuse_pages) && in try_to_unuse()
2243 while (READ_ONCE(si->inuse_pages) && in try_to_unuse()
2245 (i = find_next_to_unuse(si, i, frontswap)) != 0) { in try_to_unuse()
2285 if (READ_ONCE(si->inuse_pages)) { in try_to_unuse()
2630 struct swap_info_struct *si = p; in SYSCALL_DEFINE1() local
2633 plist_for_each_entry_continue(si, &swap_active_head, list) { in SYSCALL_DEFINE1()
2634 si->prio++; in SYSCALL_DEFINE1()
2635 si->list.prio--; in SYSCALL_DEFINE1()
2637 if (si->avail_lists[nid].prio != 1) in SYSCALL_DEFINE1()
2638 si->avail_lists[nid].prio--; in SYSCALL_DEFINE1()
2777 struct swap_info_struct *si; in swap_start() local
2786 for (type = 0; (si = swap_type_to_swap_info(type)); type++) { in swap_start()
2787 if (!(si->flags & SWP_USED) || !si->swap_map) in swap_start()
2790 return si; in swap_start()
2798 struct swap_info_struct *si = v; in swap_next() local
2804 type = si->type + 1; in swap_next()
2807 for (; (si = swap_type_to_swap_info(type)); type++) { in swap_next()
2808 if (!(si->flags & SWP_USED) || !si->swap_map) in swap_next()
2810 return si; in swap_next()
2823 struct swap_info_struct *si = v; in swap_show() local
2828 if (si == SEQ_START_TOKEN) { in swap_show()
2833 bytes = si->pages << (PAGE_SHIFT - 10); in swap_show()
2834 inuse = si->inuse_pages << (PAGE_SHIFT - 10); in swap_show()
2836 file = si->swap_file; in swap_show()
2844 si->prio); in swap_show()
3168 static bool swap_discardable(struct swap_info_struct *si) in swap_discardable() argument
3170 struct request_queue *q = bdev_get_queue(si->bdev); in swap_discardable()
3448 struct swap_info_struct *si = swap_info[type]; in si_swapinfo() local
3450 if ((si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK)) in si_swapinfo()
3451 nr_to_be_unused += si->inuse_pages; in si_swapinfo()
3467 struct swap_info_struct *si = swap_info[type]; in free_swap_is_low() local
3469 if ((si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK)) in free_swap_is_low()
3470 nr_to_be_unused += si->inuse_pages; in free_swap_is_low()
3593 void swapcache_clear(struct swap_info_struct *si, swp_entry_t entry) in swapcache_clear() argument
3599 ci = lock_cluster_or_swap_info(si, offset); in swapcache_clear()
3600 usage = __swap_entry_free_locked(si, offset, SWAP_HAS_CACHE); in swapcache_clear()
3601 unlock_cluster_or_swap_info(si, ci); in swapcache_clear()
3650 struct swap_info_struct *si; in add_swap_count_continuation() local
3665 si = get_swap_device(entry); in add_swap_count_continuation()
3666 if (!si) { in add_swap_count_continuation()
3673 spin_lock(&si->lock); in add_swap_count_continuation()
3677 ci = lock_cluster(si, offset); in add_swap_count_continuation()
3679 count = si->swap_map[offset] & ~SWAP_HAS_CACHE; in add_swap_count_continuation()
3700 head = vmalloc_to_page(si->swap_map + offset); in add_swap_count_continuation()
3703 spin_lock(&si->cont_lock); in add_swap_count_continuation()
3712 si->flags |= SWP_CONTINUED; in add_swap_count_continuation()
3740 spin_unlock(&si->cont_lock); in add_swap_count_continuation()
3743 spin_unlock(&si->lock); in add_swap_count_continuation()
3744 put_swap_device(si); in add_swap_count_continuation()
3760 static bool swap_count_continued(struct swap_info_struct *si, in swap_count_continued() argument
3768 head = vmalloc_to_page(si->swap_map + offset); in swap_count_continued()
3774 spin_lock(&si->cont_lock); in swap_count_continued()
3836 spin_unlock(&si->cont_lock); in swap_count_continued()
3844 static void free_swap_count_continuations(struct swap_info_struct *si) in free_swap_count_continuations() argument
3848 for (offset = 0; offset < si->max; offset += PAGE_SIZE) { in free_swap_count_continuations()
3850 head = vmalloc_to_page(si->swap_map + offset); in free_swap_count_continuations()
3865 struct swap_info_struct *si, *next; in cgroup_throttle_swaprate() local
3882 plist_for_each_entry_safe(si, next, &swap_avail_heads[nid], in cgroup_throttle_swaprate()
3884 if (si->bdev) { in cgroup_throttle_swaprate()
3885 blkcg_schedule_throttle(bdev_get_queue(si->bdev), true); in cgroup_throttle_swaprate()