mirror of https://gitee.com/openkylin/linux.git
[PATCH] valid_swaphandles() fix
akpm draws my attention to the fact that sysctl(VM_PAGE_CLUSTER) might conceivably change page_cluster to 0 while valid_swaphandles() is in the middle of using it, leading to an embarrassingly long loop: take a local snapshot of page_cluster and work with that. Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
2d1d43f6a4
commit
3f9e7949f8
|
@ -1723,13 +1723,14 @@ get_swap_info_struct(unsigned type)
|
|||
*/
|
||||
int valid_swaphandles(swp_entry_t entry, unsigned long *offset)
|
||||
{
|
||||
int ret = 0, i = 1 << page_cluster;
|
||||
int our_page_cluster = page_cluster;
|
||||
int ret = 0, i = 1 << our_page_cluster;
|
||||
unsigned long toff;
|
||||
struct swap_info_struct *swapdev = swp_type(entry) + swap_info;
|
||||
|
||||
if (!page_cluster) /* no readahead */
|
||||
if (!our_page_cluster) /* no readahead */
|
||||
return 0;
|
||||
toff = (swp_offset(entry) >> page_cluster) << page_cluster;
|
||||
toff = (swp_offset(entry) >> our_page_cluster) << our_page_cluster;
|
||||
if (!toff) /* first page is swap header */
|
||||
toff++, i--;
|
||||
*offset = toff;
|
||||
|
|
Loading…
Reference in New Issue