Index: linux-2.6/fs/splice.c =================================================================== --- linux-2.6.orig/fs/splice.c +++ linux-2.6/fs/splice.c @@ -570,7 +570,7 @@ static int pipe_to_file(struct pipe_inod if (this_len + offset > PAGE_CACHE_SIZE) this_len = PAGE_CACHE_SIZE - offset; - ret = pagecache_write_begin(file, mapping, sd->pos, sd->len, + ret = pagecache_write_begin(file, mapping, sd->pos, this_len, AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata); if (unlikely(ret)) goto out; @@ -583,11 +583,12 @@ static int pipe_to_file(struct pipe_inod char *dst = kmap_atomic(page, KM_USER1); memcpy(dst + offset, src + buf->offset, this_len); + flush_dcache_page(page); kunmap_atomic(dst, KM_USER1); buf->ops->unmap(pipe, buf, src); } - ret = pagecache_write_end(file, mapping, sd->pos, sd->len, sd->len, page, fsdata); + ret = pagecache_write_end(file, mapping, sd->pos, this_len, this_len, page, fsdata); out: