git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ASoC: TWL4030: Small cleanup
[safe/jmp/linux-2.6]
/
mm
/
swap_state.c
diff --git
a/mm/swap_state.c
b/mm/swap_state.c
index
3e3381d
..
3353c90
100644
(file)
--- a/
mm/swap_state.c
+++ b/
mm/swap_state.c
@@
-33,13
+33,13
@@
static const struct address_space_operations swap_aops = {
};
static struct backing_dev_info swap_backing_dev_info = {
};
static struct backing_dev_info swap_backing_dev_info = {
- .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
+ .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK
| BDI_CAP_SWAP_BACKED
,
.unplug_io_fn = swap_unplug_io_fn,
};
struct address_space swapper_space = {
.page_tree = RADIX_TREE_INIT(GFP_ATOMIC|__GFP_NOWARN),
.unplug_io_fn = swap_unplug_io_fn,
};
struct address_space swapper_space = {
.page_tree = RADIX_TREE_INIT(GFP_ATOMIC|__GFP_NOWARN),
- .tree_lock = __
RW
_LOCK_UNLOCKED(swapper_space.tree_lock),
+ .tree_lock = __
SPIN
_LOCK_UNLOCKED(swapper_space.tree_lock),
.a_ops = &swap_aops,
.i_mmap_nonlinear = LIST_HEAD_INIT(swapper_space.i_mmap_nonlinear),
.backing_dev_info = &swap_backing_dev_info,
.a_ops = &swap_aops,
.i_mmap_nonlinear = LIST_HEAD_INIT(swapper_space.i_mmap_nonlinear),
.backing_dev_info = &swap_backing_dev_info,
@@
-56,10
+56,11
@@
static struct {
void show_swap_cache_info(void)
{
void show_swap_cache_info(void)
{
- printk("Swap cache: add %lu, delete %lu, find %lu/%lu\n",
+ printk("%lu pages in swap cache\n", total_swapcache_pages);
+ printk("Swap cache stats: add %lu, delete %lu, find %lu/%lu\n",
swap_cache_info.add_total, swap_cache_info.del_total,
swap_cache_info.find_success, swap_cache_info.find_total);
swap_cache_info.add_total, swap_cache_info.del_total,
swap_cache_info.find_success, swap_cache_info.find_total);
- printk("Free swap = %l
u
kB\n", nr_swap_pages << (PAGE_SHIFT - 10));
+ printk("Free swap = %l
d
kB\n", nr_swap_pages << (PAGE_SHIFT - 10));
printk("Total swap = %lukB\n", total_swap_pages << (PAGE_SHIFT - 10));
}
printk("Total swap = %lukB\n", total_swap_pages << (PAGE_SHIFT - 10));
}
@@
-74,13
+75,14
@@
int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask)
BUG_ON(!PageLocked(page));
BUG_ON(PageSwapCache(page));
BUG_ON(PagePrivate(page));
BUG_ON(!PageLocked(page));
BUG_ON(PageSwapCache(page));
BUG_ON(PagePrivate(page));
+ BUG_ON(!PageSwapBacked(page));
error = radix_tree_preload(gfp_mask);
if (!error) {
page_cache_get(page);
SetPageSwapCache(page);
set_page_private(page, entry.val);
error = radix_tree_preload(gfp_mask);
if (!error) {
page_cache_get(page);
SetPageSwapCache(page);
set_page_private(page, entry.val);
-
write
_lock_irq(&swapper_space.tree_lock);
+
spin
_lock_irq(&swapper_space.tree_lock);
error = radix_tree_insert(&swapper_space.page_tree,
entry.val, page);
if (likely(!error)) {
error = radix_tree_insert(&swapper_space.page_tree,
entry.val, page);
if (likely(!error)) {
@@
-88,7
+90,7
@@
int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask)
__inc_zone_page_state(page, NR_FILE_PAGES);
INC_CACHE_INFO(add_total);
}
__inc_zone_page_state(page, NR_FILE_PAGES);
INC_CACHE_INFO(add_total);
}
-
write
_unlock_irq(&swapper_space.tree_lock);
+
spin
_unlock_irq(&swapper_space.tree_lock);
radix_tree_preload_end();
if (unlikely(error)) {
radix_tree_preload_end();
if (unlikely(error)) {
@@
-182,9
+184,9
@@
void delete_from_swap_cache(struct page *page)
entry.val = page_private(page);
entry.val = page_private(page);
-
write
_lock_irq(&swapper_space.tree_lock);
+
spin
_lock_irq(&swapper_space.tree_lock);
__delete_from_swap_cache(page);
__delete_from_swap_cache(page);
-
write
_unlock_irq(&swapper_space.tree_lock);
+
spin
_unlock_irq(&swapper_space.tree_lock);
swap_free(entry);
page_cache_release(page);
swap_free(entry);
page_cache_release(page);
@@
-200,7
+202,7
@@
void delete_from_swap_cache(struct page *page)
*/
static inline void free_swap_cache(struct page *page)
{
*/
static inline void free_swap_cache(struct page *page)
{
- if (PageSwapCache(page) &&
!TestSetPageLocked
(page)) {
+ if (PageSwapCache(page) &&
trylock_page
(page)) {
remove_exclusive_swap_page(page);
unlock_page(page);
}
remove_exclusive_swap_page(page);
unlock_page(page);
}
@@
-301,17
+303,19
@@
struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
* re-using the just freed swap entry for an existing page.
* May fail (-ENOMEM) if radix-tree node allocation failed.
*/
* re-using the just freed swap entry for an existing page.
* May fail (-ENOMEM) if radix-tree node allocation failed.
*/
- SetPageLocked(new_page);
+ __set_page_locked(new_page);
+ SetPageSwapBacked(new_page);
err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL);
err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL);
- if (
!err
) {
+ if (
likely(!err)
) {
/*
* Initiate read into locked page and return.
*/
/*
* Initiate read into locked page and return.
*/
- lru_cache_add_a
ctive
(new_page);
+ lru_cache_add_a
non
(new_page);
swap_readpage(NULL, new_page);
return new_page;
}
swap_readpage(NULL, new_page);
return new_page;
}
- ClearPageLocked(new_page);
+ ClearPageSwapBacked(new_page);
+ __clear_page_locked(new_page);
swap_free(entry);
} while (err != -ENOMEM);
swap_free(entry);
} while (err != -ENOMEM);