diff options
author | Steve French <sfrench@us.ibm.com> | 2006-02-01 15:16:53 -0500 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-02-01 15:16:53 -0500 |
commit | e6da74e1f20ea7822e52a9e4fbd3d25bd907e471 (patch) | |
tree | d9b3bc7e654fb788d1cf3a1759b1b3c74cc56a04 /mm/memory.c | |
parent | 1877c9ea66a29563987f22d0a86c66f438a87ce2 (diff) | |
parent | 3c3b809e256c417847f1a96b2f9d9f66c7fcb02c (diff) |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c index 7a11ddd5060f..2bee1f21aa8a 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1871,6 +1871,7 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
1871 | goto out; | 1871 | goto out; |
1872 | 1872 | ||
1873 | entry = pte_to_swp_entry(orig_pte); | 1873 | entry = pte_to_swp_entry(orig_pte); |
1874 | again: | ||
1874 | page = lookup_swap_cache(entry); | 1875 | page = lookup_swap_cache(entry); |
1875 | if (!page) { | 1876 | if (!page) { |
1876 | swapin_readahead(entry, address, vma); | 1877 | swapin_readahead(entry, address, vma); |
@@ -1894,6 +1895,12 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
1894 | 1895 | ||
1895 | mark_page_accessed(page); | 1896 | mark_page_accessed(page); |
1896 | lock_page(page); | 1897 | lock_page(page); |
1898 | if (!PageSwapCache(page)) { | ||
1899 | /* Page migration has occured */ | ||
1900 | unlock_page(page); | ||
1901 | page_cache_release(page); | ||
1902 | goto again; | ||
1903 | } | ||
1897 | 1904 | ||
1898 | /* | 1905 | /* |
1899 | * Back out if somebody else already faulted in this pte. | 1906 | * Back out if somebody else already faulted in this pte. |