diff options
author | Paul Mackerras <paulus@samba.org> | 2006-09-14 07:07:18 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-09-14 07:07:18 +1000 |
commit | c547fc28ab3e8716076fdaf4bd0260c5d63a18f7 (patch) | |
tree | 34af1fa64a63618660187ae58ad182665a1861ef /mm/mempolicy.c | |
parent | 3dd836a56de0d4f049438412959b905e1db4666e (diff) | |
parent | 63b98080daa35f0d682db04f4fb7ada010888752 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r-- | mm/mempolicy.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index e07e27e846a2..a9963ceddd65 100644 --- a/mm/mempolicy.c +++ b/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 |