From 8b7f79f723fed185c850f62edc7dcc1d3662eb49 Mon Sep 17 00:00:00 2001 From: Nishanth Aravamudan Date: Thu, 31 Aug 2006 21:27:53 -0700 Subject: [PATCH] --- yaml --- r: 33769 b: refs/heads/master c: 3b98b087fc2daab67518d2baa8aef19a6ad82723 h: refs/heads/master i: 33767: f5a1de81b91e43ef7fcfd82ca95948fb31cd55e3 v: v3 --- [refs] | 2 +- trunk/mm/mempolicy.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index b1fd62dd9f25..4fdc7bda8b82 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1678df37be8abbb381becdc40242ed915e775550 +refs/heads/master: 3b98b087fc2daab67518d2baa8aef19a6ad82723 diff --git a/trunk/mm/mempolicy.c b/trunk/mm/mempolicy.c index e07e27e846a2..a9963ceddd65 100644 --- a/trunk/mm/mempolicy.c +++ b/trunk/mm/mempolicy.c @@ -1176,7 +1176,15 @@ static inline unsigned interleave_nid(struct mempolicy *pol, if (vma) { unsigned long off; - off = vma->vm_pgoff; + /* + * for small pages, there is no difference between + * shift and PAGE_SHIFT, so the bit-shift is safe. + * for huge pages, since vm_pgoff is in units of small + * pages, we need to shift off the always 0 bits to get + * a useful offset. + */ + BUG_ON(shift < PAGE_SHIFT); + off = vma->vm_pgoff >> (shift - PAGE_SHIFT); off += (addr - vma->vm_start) >> shift; return offset_il_node(pol, vma, off); } else