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 from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html