aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2010-11-10 10:05:51 +0100
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>2010-11-10 10:05:53 +0100
commit25591b07033663e09f5e60355fc5ec4d4aa53e63 (patch)
treeab42df338d8cc5252116fb3345876a95ade0b5c0
parentf6614b7bb405a9b35dd28baea989a749492c46b2 (diff)
downloadkernel_samsung_aries-25591b07033663e09f5e60355fc5ec4d4aa53e63.zip
kernel_samsung_aries-25591b07033663e09f5e60355fc5ec4d4aa53e63.tar.gz
kernel_samsung_aries-25591b07033663e09f5e60355fc5ec4d4aa53e63.tar.bz2
[S390] fix get_user_pages_fast
The check for the _PAGE_RO bit in get_user_pages_fast for write==1 is the wrong way around. It must not be set for the fast path. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/mm/gup.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c
index 38e641c..45b405c 100644
--- a/arch/s390/mm/gup.c
+++ b/arch/s390/mm/gup.c
@@ -20,18 +20,17 @@
static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
unsigned long end, int write, struct page **pages, int *nr)
{
- unsigned long mask, result;
+ unsigned long mask;
pte_t *ptep, pte;
struct page *page;
- result = write ? 0 : _PAGE_RO;
- mask = result | _PAGE_INVALID | _PAGE_SPECIAL;
+ mask = (write ? _PAGE_RO : 0) | _PAGE_INVALID | _PAGE_SPECIAL;
ptep = ((pte_t *) pmd_deref(pmd)) + pte_index(addr);
do {
pte = *ptep;
barrier();
- if ((pte_val(pte) & mask) != result)
+ if ((pte_val(pte) & mask) != 0)
return 0;
VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
page = pte_page(pte);