Current TRIM/UNMAP/etc implementation are slow enough that discarding small chunk during run time is a bad idea. So only discard the whole swap space on swapon by default, but require the admin to enable it for run-time discards using the new vm.discard_swapspace sysctl. Signed-off-by: Christoph Hellwig <hch@xxxxxx> Index: linux-2.6/include/linux/swap.h =================================================================== --- linux-2.6.orig/include/linux/swap.h 2009-11-27 11:50:47.319003920 +0100 +++ linux-2.6/include/linux/swap.h 2009-11-27 11:51:55.617286868 +0100 @@ -247,6 +247,7 @@ extern unsigned long mem_cgroup_shrink_n extern int __isolate_lru_page(struct page *page, int mode, int file); extern unsigned long shrink_all_memory(unsigned long nr_pages); extern int vm_swappiness; +extern int vm_discard_swapspace; extern int remove_mapping(struct address_space *mapping, struct page *page); extern long vm_total_pages; Index: linux-2.6/kernel/sysctl.c =================================================================== --- linux-2.6.orig/kernel/sysctl.c 2009-11-27 11:49:02.935254088 +0100 +++ linux-2.6/kernel/sysctl.c 2009-11-27 11:53:10.333006621 +0100 @@ -1163,6 +1163,16 @@ static struct ctl_table vm_table[] = { .extra1 = &zero, .extra2 = &one_hundred, }, + { + .ctl_name = CTL_UNNUMBERED, + .procname = "discard_swapspace", + .data = &vm_discard_swapspace, + .maxlen = sizeof(vm_discard_swapspace), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &one, + }, #ifdef CONFIG_HUGETLB_PAGE { .procname = "nr_hugepages", Index: linux-2.6/mm/swapfile.c =================================================================== --- linux-2.6.orig/mm/swapfile.c 2009-11-27 11:53:19.449254088 +0100 +++ linux-2.6/mm/swapfile.c 2009-11-27 11:54:07.883255931 +0100 @@ -41,6 +41,7 @@ long nr_swap_pages; long total_swap_pages; static int swap_overflow; static int least_priority; +int vm_discard_swapspace; static const char Bad_file[] = "Bad swap file entry "; static const char Unused_file[] = "Unused swap file entry "; @@ -1978,7 +1979,7 @@ SYSCALL_DEFINE2(swapon, const char __use p->flags |= SWP_SOLIDSTATE; p->cluster_next = 1 + (random32() % p->highest_bit); } - if (discard_swap(p) == 0) + if (discard_swap(p) == 0 && vm_discard_swapspace) p->flags |= SWP_DISCARDABLE; } -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html