diff options
-rw-r--r-- | include/linux/swap.h | 1 | ||||
-rw-r--r-- | mm/swapfile.c | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/include/linux/swap.h b/include/linux/swap.h index fe79f44c858e..cbf7fbed3dfd 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -122,6 +122,7 @@ enum { | |||
122 | SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */ | 122 | SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */ |
123 | SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */ | 123 | SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */ |
124 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ | 124 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ |
125 | SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ | ||
125 | /* add others here before... */ | 126 | /* add others here before... */ |
126 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ | 127 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ |
127 | }; | 128 | }; |
diff --git a/mm/swapfile.c b/mm/swapfile.c index ca75b9e7c09f..b0f56603b9be 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/namei.h> | 16 | #include <linux/namei.h> |
17 | #include <linux/shm.h> | 17 | #include <linux/shm.h> |
18 | #include <linux/blkdev.h> | 18 | #include <linux/blkdev.h> |
19 | #include <linux/random.h> | ||
19 | #include <linux/writeback.h> | 20 | #include <linux/writeback.h> |
20 | #include <linux/proc_fs.h> | 21 | #include <linux/proc_fs.h> |
21 | #include <linux/seq_file.h> | 22 | #include <linux/seq_file.h> |
@@ -1806,6 +1807,11 @@ asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) | |||
1806 | goto bad_swap; | 1807 | goto bad_swap; |
1807 | } | 1808 | } |
1808 | 1809 | ||
1810 | if (blk_queue_nonrot(bdev_get_queue(p->bdev))) { | ||
1811 | p->flags |= SWP_SOLIDSTATE; | ||
1812 | srandom32((u32)get_seconds()); | ||
1813 | p->cluster_next = 1 + (random32() % p->highest_bit); | ||
1814 | } | ||
1809 | if (discard_swap(p) == 0) | 1815 | if (discard_swap(p) == 0) |
1810 | p->flags |= SWP_DISCARDABLE; | 1816 | p->flags |= SWP_DISCARDABLE; |
1811 | 1817 | ||
@@ -1822,10 +1828,11 @@ asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) | |||
1822 | total_swap_pages += nr_good_pages; | 1828 | total_swap_pages += nr_good_pages; |
1823 | 1829 | ||
1824 | printk(KERN_INFO "Adding %uk swap on %s. " | 1830 | printk(KERN_INFO "Adding %uk swap on %s. " |
1825 | "Priority:%d extents:%d across:%lluk%s\n", | 1831 | "Priority:%d extents:%d across:%lluk %s%s\n", |
1826 | nr_good_pages<<(PAGE_SHIFT-10), name, p->prio, | 1832 | nr_good_pages<<(PAGE_SHIFT-10), name, p->prio, |
1827 | nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10), | 1833 | nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10), |
1828 | (p->flags & SWP_DISCARDABLE) ? " D" : ""); | 1834 | (p->flags & SWP_SOLIDSTATE) ? "SS" : "", |
1835 | (p->flags & SWP_DISCARDABLE) ? "D" : ""); | ||
1829 | 1836 | ||
1830 | /* insert swap space into swap_list: */ | 1837 | /* insert swap space into swap_list: */ |
1831 | prev = -1; | 1838 | prev = -1; |