diff options
| author | Anton Altaparmakov <aia21@cantab.net> | 2005-05-21 22:00:02 +0100 |
|---|---|---|
| committer | Anton Altaparmakov <aia21@cantab.net> | 2005-05-21 22:00:02 +0100 |
| commit | 67394f8f069c2fdf90f3b6d851824c07815442af (patch) | |
| tree | 0c33e62d34dbaecea434ae9ece3cc0c56db8b1f7 /mm/memory.c | |
| parent | 450cbfbbbd88876e3ccec1d277f613221ca82bb7 (diff) | |
| parent | 9636273dae265b9354b861b373cd43cd76a6d0fe (diff) | |
Merge with /usr/src/ntfs-2.6.git
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; } /* |
