projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'omap-clock-for-next' of git://git.pwsan.com/linux-2.6 into devel
[firefly-linux-kernel-4.4.55.git]
/
mm
/
swap_state.c
diff --git
a/mm/swap_state.c
b/mm/swap_state.c
index 1416e7e9e02db3b5da60fe3a270e98e7b84024bb..42cd38eba79f1ffb096db8683bc11dd5604fe367 100644
(file)
--- a/
mm/swap_state.c
+++ b/
mm/swap_state.c
@@
-124,7
+124,6
@@
void __delete_from_swap_cache(struct page *page)
/**
* add_to_swap - allocate swap space for a page
* @page: page we want to move to swap
/**
* add_to_swap - allocate swap space for a page
* @page: page we want to move to swap
- * @gfp_mask: memory allocation flags
*
* Allocate swap space for the page and add the page to the
* swap cache. Caller needs to hold the page lock.
*
* Allocate swap space for the page and add the page to the
* swap cache. Caller needs to hold the page lock.
@@
-162,11
+161,11
@@
int add_to_swap(struct page *page)
return 1;
case -EEXIST:
/* Raced with "speculative" read_swap_cache_async */
return 1;
case -EEXIST:
/* Raced with "speculative" read_swap_cache_async */
- swap
_free(entry
);
+ swap
cache_free(entry, NULL
);
continue;
default:
/* -ENOMEM radix-tree allocation failure */
continue;
default:
/* -ENOMEM radix-tree allocation failure */
- swap
_free(entry
);
+ swap
cache_free(entry, NULL
);
return 0;
}
}
return 0;
}
}
@@
-188,8
+187,7
@@
void delete_from_swap_cache(struct page *page)
__delete_from_swap_cache(page);
spin_unlock_irq(&swapper_space.tree_lock);
__delete_from_swap_cache(page);
spin_unlock_irq(&swapper_space.tree_lock);
- mem_cgroup_uncharge_swapcache(page, entry);
- swap_free(entry);
+ swapcache_free(entry, page);
page_cache_release(page);
}
page_cache_release(page);
}
@@
-293,7
+291,10
@@
struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
/*
* Swap entry may have been freed since our caller observed it.
*/
/*
* Swap entry may have been freed since our caller observed it.
*/
- if (!swap_duplicate(entry))
+ err = swapcache_prepare(entry);
+ if (err == -EEXIST) /* seems racy */
+ continue;
+ if (err) /* swp entry is obsolete ? */
break;
/*
break;
/*
@@
-312,12
+313,12
@@
struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
* Initiate read into locked page and return.
*/
lru_cache_add_anon(new_page);
* Initiate read into locked page and return.
*/
lru_cache_add_anon(new_page);
- swap_readpage(
NULL,
new_page);
+ swap_readpage(new_page);
return new_page;
}
ClearPageSwapBacked(new_page);
__clear_page_locked(new_page);
return new_page;
}
ClearPageSwapBacked(new_page);
__clear_page_locked(new_page);
- swap
_free(entry
);
+ swap
cache_free(entry, NULL
);
} while (err != -ENOMEM);
if (new_page)
} while (err != -ENOMEM);
if (new_page)