On 06/07/2013 08:17 AM, Kirill A. Shutemov wrote: <snip> > I guess this way is better, right? > > @@ -2382,6 +2393,7 @@ static ssize_t generic_perform_write(struct file *file, > unsigned long bytes; /* Bytes to write to page */ > size_t copied; /* Bytes copied from user */ > void *fsdata; > + int subpage_nr = 0; > > offset = (pos & (PAGE_CACHE_SIZE - 1)); > bytes = min_t(unsigned long, PAGE_CACHE_SIZE - offset, > @@ -2411,8 +2423,14 @@ again: > if (mapping_writably_mapped(mapping)) > flush_dcache_page(page); > > + if (PageTransHuge(page)) { > + off_t huge_offset = pos & ~HPAGE_PMD_MASK; > + subpage_nr = huge_offset >> PAGE_CACHE_SHIFT; > + } > + > pagefault_disable(); > - copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes); > + copied = iov_iter_copy_from_user_atomic(page + subpage_nr, i, > + offset, bytes); > pagefault_enable(); > flush_dcache_page(page); That looks substantially easier to understand to me. Nice. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>