From ea09eecf7787d6ad5451caed0a4c6f9cff605304 Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Tue, 6 Jan 2009 14:39:54 -0800 Subject: [PATCH] --- yaml --- r: 126227 b: refs/heads/master c: 20137a490f397d9c01fc9fadd83a8d198bda4477 h: refs/heads/master i: 126225: 474f109e99d32d4d81f37712c4f47846263a7ab0 126223: 814b9facc356c98d452e910f1e615178155395b5 v: v3 --- [refs] | 2 +- trunk/include/linux/swap.h | 1 + trunk/mm/swapfile.c | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 26d453b9b51c..366fc4dd28a9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7992fde72ce06c73280a1939b7a1e903bc95ef85 +refs/heads/master: 20137a490f397d9c01fc9fadd83a8d198bda4477 diff --git a/trunk/include/linux/swap.h b/trunk/include/linux/swap.h index fe79f44c858e..cbf7fbed3dfd 100644 --- a/trunk/include/linux/swap.h +++ b/trunk/include/linux/swap.h @@ -122,6 +122,7 @@ enum { SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */ SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */ SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ + SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ /* add others here before... */ SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ }; diff --git a/trunk/mm/swapfile.c b/trunk/mm/swapfile.c index ca75b9e7c09f..b0f56603b9be 100644 --- a/trunk/mm/swapfile.c +++ b/trunk/mm/swapfile.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -1806,6 +1807,11 @@ asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) goto bad_swap; } + if (blk_queue_nonrot(bdev_get_queue(p->bdev))) { + p->flags |= SWP_SOLIDSTATE; + srandom32((u32)get_seconds()); + p->cluster_next = 1 + (random32() % p->highest_bit); + } if (discard_swap(p) == 0) p->flags |= SWP_DISCARDABLE; @@ -1822,10 +1828,11 @@ asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) total_swap_pages += nr_good_pages; printk(KERN_INFO "Adding %uk swap on %s. " - "Priority:%d extents:%d across:%lluk%s\n", + "Priority:%d extents:%d across:%lluk %s%s\n", nr_good_pages<<(PAGE_SHIFT-10), name, p->prio, nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10), - (p->flags & SWP_DISCARDABLE) ? " D" : ""); + (p->flags & SWP_SOLIDSTATE) ? "SS" : "", + (p->flags & SWP_DISCARDABLE) ? "D" : ""); /* insert swap space into swap_list: */ prev = -1;