From 997c7b81381acb166149f0af63bd303a889c19e6 Mon Sep 17 00:00:00 2001 From: Kirill Korotaev Date: Mon, 16 May 2005 21:53:50 -0700 Subject: [PATCH] --- yaml --- r: 1167 b: refs/heads/master c: b81074800b98ac50b64d4c8d34e8abf0fda5e3d1 h: refs/heads/master i: 1165: da0bf6edaa2c248f796dd39ad301858111f86c35 1163: 9e517c29453a39037eb5c96f28cb5789560baef6 1159: 1d2cf0c30e2d24c53505cd318ad303bade851e10 1151: 26252ed52a24ecfe8a97602f82d5f0311bcd6987 v: v3 --- [refs] | 2 +- trunk/mm/memory.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index e98bca2f281e..668110e372a3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c64610ba585fabb36be78782868277f3d9741a2e +refs/heads/master: b81074800b98ac50b64d4c8d34e8abf0fda5e3d1 diff --git a/trunk/mm/memory.c b/trunk/mm/memory.c index 6bad4c4064e7..d209f745db7f 100644 --- a/trunk/mm/memory.c +++ b/trunk/mm/memory.c @@ -1701,12 +1701,13 @@ static int do_swap_page(struct mm_struct * mm, spin_lock(&mm->page_table_lock); page_table = pte_offset_map(pmd, address); if (unlikely(!pte_same(*page_table, orig_pte))) { - pte_unmap(page_table); - spin_unlock(&mm->page_table_lock); - unlock_page(page); - page_cache_release(page); ret = VM_FAULT_MINOR; - goto out; + goto out_nomap; + } + + if (unlikely(!PageUptodate(page))) { + ret = VM_FAULT_SIGBUS; + goto out_nomap; } /* The page isn't present yet, go ahead with the fault. */ @@ -1741,6 +1742,12 @@ static int do_swap_page(struct mm_struct * mm, spin_unlock(&mm->page_table_lock); out: return ret; +out_nomap: + pte_unmap(page_table); + spin_unlock(&mm->page_table_lock); + unlock_page(page); + page_cache_release(page); + goto out; } /*