Sorry for the latency. I was away last week. On Fri, Oct 25, 2013 at 11:37:53AM -0400, Josef Bacik wrote: > Apparently we don't actually close the files until we return to userspace, so > stop using vfs_read in send. This is actually better for us since we can > avoid > all the extra logic of holding the file we're sending open and making sure to > clean it up.
Good stuff. A few things: > + pgoff_t index = offset >> PAGE_CACHE_SHIFT; > + pgoff_t last_index; > + unsigned pg_offset = offset & (PAGE_CACHE_SIZE - 1); unsigned pg_offset = offset & ~PAGE_CACHE_MASK; > + if (offset + len > i_size_read(inode)) { I worry about offset + len wrapping but I didn't check the caller to see if that's possible. > + while (index <= last_index) { > + unsigned cur_len = min_t(unsigned, len, PAGE_CACHE_SIZE); Careful, this'd insert some random kernel memory after the first partial page. unsigned cur_len = min_t(unsigned, len, PAGE_CACHE_SIZE - pg_off); > + addr = kmap(page); > + memcpy(sctx->read_buf + ret, addr + pg_offset, cur_len); > + kunmap(page); > + unlock_page(page); I think you need flush_dcache_page() before reading from user mappable page cache pages. (Need to make sure that potential cached stores at other user virtual addreses are flushed before we read from the kernel mapping.) - z -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html