> > @@ -776,7 +777,7 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, > > unsigned long end; > > > > pm.pos = 0; > > - end = start_vaddr + PAGEMAP_WALK_SIZE; > > + end = (start_vaddr + PAGEMAP_WALK_SIZE) & PAGEMAP_WALK_MASK; > > /* overflow ? */ > > if (end < start_vaddr || end > end_vaddr) > > end = end_vaddr; > > Ack. > > But ALIGN() can't be used ? ALIGN() returns the same address as the input if it is already aligned, but what we need here is the next PMD boundary. So something like end = IS_ALIGNED(start_vaddr, PAGEMAP_WALK_SIZE) ? start_vaddr + PAGEMAP_WALK_SIZE : ALIGN(start_vaddr, PAGEMAP_WALK_SIZE) keeps the semantics, but I don't like it because it's lengthy. Anyway, thanks for your comment. Naoya Horiguchi -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>