diff options
| author | <jgarzik@pretzel.yyz.us> | 2005-05-27 22:07:40 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-05-27 22:07:40 -0400 |
| commit | ff0e0ea2f5d36fa90fc2c57fd019102b0a0cfabf (patch) | |
| tree | 963cdd52a4032cd4827896c4e813cfbf6dd7b3e6 /mm/memory.c | |
| parent | 43f66a6ce8da299344cf1bc2ac2311889cc88555 (diff) | |
| parent | 1f15d694522af9cd7492695f11dd2dc77b6cf098 (diff) | |
Automatic merge of /spare/repo/netdev-2.6 branch we18
Diffstat (limited to 'mm/memory.c')
| -rw-r--r-- | mm/memory.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/memory.c b/mm/memory.c index 6bad4c4064e7..d209f745db7f 100644 --- a/mm/memory.c +++ b/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; } /* |
